我在 Listview
上使用 setMultiChoiceModeListener
调用操作模式来选择要删除的多个项目。在 ListView
滚动时,我从服务器加载更多数据并通知适配器。在 adapter
被通知后,Action Mode(如果被调用)被销毁并重新创建,这使得标题和选定的数组列表为空(您可以看到下图)。虽然 ListView 项目选择仍然存在。我希望 CAB 像我们在 Gmail 应用程序中看到的那样持久存在,它不会在加载更多数据时破坏。
下面是 Action 模式的代码
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;
}
});
任何帮助将不胜感激,提前致谢。
最佳答案
您需要保存所选项目 ID,以便在刷新/通知适配器更改后保持状态并显示为所选项目,如下例所示:
1) https://androidperspective.wordpress.com/2013/04/17/contextual-action-bar-with-listview/
(它显示选择并将所选项目 ID 保存在数组中以保存状态)。
(它显示了您想要删除的完整示例,只需使用 sherlock 操作栏,它只会有很小的变化)。
很高兴知道它是否对您有帮助。
关于 ListView 通知数据集更改后Android CAB销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40220188/