【发布时间】:2017-03-06 08:02:47
【问题描述】:
我在Listview 上使用setMultiChoiceModeListener 来调用操作模式以选择要删除的多个项目。在ListView 滚动上,我从服务器加载更多数据并通知适配器。在adapter 被通知后,Action Mode(如果被调用)被销毁并重新创建,这使得 title 和 selected arraylist 为空(您可以看到下图)。而列表视图项目选择仍然存在。我希望 CAB 能够像我们在 Gmail 应用中看到的那样持久,在加载更多数据时它不会破坏。
下面是动作模式的代码
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
Item mItem = adapter.items.get(position);
if (mItem.isSection()) {
} else {
mode.setTitle(listView.getCheckedItemCount() + " Selected");
EntryItem mEntryItem = (EntryItem) mItem;
orderid = mEntryItem.orderId;
if (checked) {
selectedIdList.add(orderid);
} else {
selectedIdList.remove(orderid);
}
// Toggle the state of item after every click on it
adapter.toggleSelection(position);
}
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
if (item.getItemId() == R.id.delete){
if (selectedIdList.size() > 0) {
deleteItems(selectedIdList);
}
mode.finish();
return true;
}
return false;
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.menu_main, menu);
actionMode = mode;
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
actionMode = null;
if (selectedIdList.size() > 0) {
selectedIdList.clear();
adapter.mSelectedItemsIds.clear();
}
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
});
任何帮助将不胜感激,在此先感谢。
【问题讨论】:
-
尝试从 itemclick 中删除 mode.finish() 可能会阻止重新创建。
-
请在此处添加日志以便查看
-
@parikdhakan
mode.finish()inonActionItemClicked在actionbar中点击删除图标被调用,否则它不会在那里被调用。
标签: android listview android-cab