У меня есть ListFragment
, связанный с простым ArrayAdapter
. ListView содержит список отмечаемых элементов и его расположение XML выглядит следующим образом:Как правильно инициировать многоэлементную панель контекстного действия для ListFragment (с проблемами)
<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"/>
Как вы можете видеть, я установить long-clickable
и choicemode
атрибуты в макете XML.
я установить соответствующие слушателей в ListFragment
«s onViewCreated
обратного вызова:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ListView list_view = getListView();
list_view.setMultiChoiceModeListener(this);
list_view.setOnItemLongClickListener(this);
}
Я прохожу в this
в качестве параметра слушателя, потому что мой ListFragment
также осуществляет обратные вызовы этих слушателей.
Это обратный вызов, я имею проблемы с:
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id
{
activity.startActionMode(this);
return true;
}
Во-первых, что onItemLongClick
никогда не вызывается. Но, панель контекстного действия (CAB) запускается и отлично работает, когда элемент списка длинным щелчком мыши!
Фактически, CAB инициирует должным образом без этого обратного вызова! Мой обратный вызов использует activity.startActionMode(this)
, который показывает CAB, но не облегчает проверку элементов в списке (я тестировал это в другом месте).
Как правильно программно обрабатывать длинные клики, чтобы инициировать CAB и облегчить проверку элементов списка?
Я использую методы, представленные в разделах Android Developer Guide (они использовались onLongClickListener, которые я также пытался безрезультатно), но он, похоже, не работает.