6

Mam ListFragment powiązane z prostym ArrayAdapter. ListView posiada listę Rejestrowalne elementów XML i jego układ jest następujący:Jak poprawnie uruchomić pasek wyboru kontekstowego działania dla ListFragment (mając problemy)

<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"/> 

Jak widać, mam ustawić long-clickable i choicemode atrybutów w układzie XML.

ustawić odpowiednie słuchaczy w ListFragment „s onViewCreated callback:

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

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

mijam w this jako parametr słuchacza bo moja ListFragment wdrożył również wywołania zwrotne tych słuchaczy.

To jest zwrotna Mam problemy z:

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

po pierwsze, że onItemLongClick nigdy nie jest wywoływana. Ale pasek kontekstowej akcji (CAB) uruchamia się i działa idealnie, gdy element listy jest długo kliknięty!

W rzeczywistości, CAB inicjuje poprawnie bez tego oddzwonienia! Moje wywołanie zwrotne używa activity.startActionMode(this), które pokazuje CAB, ale nie ułatwia sprawdzania elementów na liście (testowałem to gdzie indziej).

Jak poprawnie zaprogramować obsługę długich kliknięć, aby zainicjować CAB i ułatwić sprawdzanie elementów listy?

Używam metod przedstawionych w tematach Android Developer Guide (użyli oniLongClickListener, które również starałem się bezskutecznie), ale wydaje się, że nie działa.

Odpowiedz

1

Zgaduję zorientowali to jedno, ale dla potomności, co trzeba zrobić, aby dodać menu kontekstowe jest po prostu dodać elementy menu kontekstowego w onContextMenuCreated ramach swojej działalności root/fragmentu:

@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]); 
    } 
    } 
} 

Następnie należy odpowiedzieć na kliknięcia menu kontekstowego pod numerem onContextMenuCreated. Więcej informacji można znaleźć tutaj:

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