6

Ho un ListFragment associato a un semplice ArrayAdapter. Il ListView contiene un elenco di elementi controllabili e la sua disposizione di XML è la seguente:Come avvio correttamente una barra di azioni contestuali a selezione multipla per ListFragment (con problemi)

<ListView android:id="@id/android:list" 
       android:layout_width="match_parent" 
       android:layout_height="0dip" 
       android:layout_weight="1" 
       android:layout_marginLeft="2mm" 
       android:layout_marginRight="2mm" 
       android:drawSelectorOnTop="false" 
       android:longClickable="true" 
       android:choiceMode="multipleChoiceModal"/> 

Come potete vedere, ho impostato le long-clickable e choicemode attributi nel layout XML.

ho impostato l'ascoltatori appropriate in onViewCreated callback s' il ListFragment:

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    ListView list_view = getListView(); 
    list_view.setMultiChoiceModeListener(this); 
    list_view.setOnItemLongClickListener(this); 
} 

passo nel this come parametro ascoltatore perché il mio ListFragment ha inoltre implementato i callback di quegli ascoltatori.

Questa è la richiamata sto avendo problemi con:

@Override 
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id 
{ 
    activity.startActionMode(this); 
    return true; 
} 

In primo luogo, che onItemLongClick non è mai chiamato. Tuttavia, la barra delle azioni contestuali (CAB) si avvia e funziona perfettamente quando si fa clic a lungo su un elemento della lista!

In effetti, il CAB avvia correttamente senza questa richiamata! La mia callback utilizza activity.startActionMode(this), che mostra il CAB, ma non facilita il controllo degli elementi nell'elenco (l'ho provato altrove).

Come gestisco in modo programmatico i clic lunghi per avviare il CAB e facilitare la verifica delle voci dell'elenco?

Sto utilizzando i metodi presentati negli argomenti Android Developer Guide (hanno utilizzato suLongClickListener, che ho anche provato senza alcun risultato), ma non sembra funzionare.

risposta

1

Sto indovinando si capito questo fuori, ma per i posteri, che cosa dovete fare per aggiungere il menu di contesto è semplicemente quello di aggiungere le voci di menu contesto in onContextMenuCreated, sotto la vostra attività di root/frammento:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
    ContextMenuInfo menuInfo) { 
    if (v.getId()==R.id.list) { 
    String[] menuItems = getResources().getStringArray(R.array.menu); 
    for (int i = 0; i<menuItems.length; i++) { 
     menu.add(Menu.NONE, i, i, menuItems[i]); 
    } 
    } 
} 

Quindi, rispondere ai clic del menu di scelta rapida sotto onContextMenuCreated. Puoi leggere di più qui:

http://www.mikeplate.com/2010/01/21/show-a-context-menu-for-long-clicks-in-an-android-listview/

Problemi correlati