Android 如何正确启动ListFragment的多选上下文操作栏(有问题)
我有一个与简单的Android 如何正确启动ListFragment的多选上下文操作栏(有问题),android,android-listview,android-listfragment,onlongclicklistener,contextual-action-bar,Android,Android Listview,Android Listfragment,Onlongclicklistener,Contextual Action Bar,我有一个与简单的数组适配器关联的列表片段。ListView包含可检查项的列表,其XML布局如下所示: <ListView android:id="@id/android:list" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" android:l
数组适配器关联的列表片段
。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"/>
我将this
作为侦听器参数传入,因为我的ListFragment
也实现了这些侦听器的回调
这是我遇到问题的回调:
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id
{
activity.startActionMode(this);
return true;
}
@覆盖
公共布尔值长单击(AdapterView父项、视图、整型位置、长id
{
activity.startActionMode(this);
返回true;
}
首先,永远不会调用onitmlongclick
。但是,当长时间单击列表项时,上下文操作栏(CAB)会启动并正常工作!
事实上,CAB在没有此回调的情况下可以正常启动!我的回调使用activity.startActionMode(this)
,它将显示CAB,但不便于检查列表中的项目(我在其他地方测试过)
如何以编程方式正确处理长时间单击以启动CAB并方便检查列表项?
我正在使用主题中介绍的方法(他们只使用了LongClickListener,我也尝试过,但没有效果),但它似乎不起作用。我猜您已经解决了这个问题,但对于后代来说,添加上下文菜单所需做的只是在根活动/片段下的onContextMenuCreated中添加上下文菜单项:
@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]);
}
}
}
@覆盖
public void onCreateContextMenu(ContextMenu,视图v,
上下文菜单信息(menuInfo){
if(v.getId()==R.id.list){
字符串[]menuItems=getResources().getStringArray(R.array.menu);
对于(int i=0;i
@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]);
}
}
}