我有一个ListFragment
与一个简单的ArrayAdapter
. ListView 包含一个可检查项的列表,其 XML 布局如下:
<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"/>
如您所见,我在 XML 布局中设置了long-clickable
和choicemode
属性。
ListFragment
我在的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 开发人员指南主题中提供的方法(他们使用了 onLongClickListener,我也尝试过但无济于事),但它似乎不起作用。