在ListView
中使用Fragment
时出现问题。当我使用MultiChoiceModelListener
时,当我长按ActionMode
中的项目时,它会显示ListView
。
问题是:
ActionMode
被激活,并且用户用其他片段替换该片段时,动作模式仍然存在,请看下面的图片。ActionMode mode = null
并实例化mode
变量onCreateActionMode
并在onDestroyActionMode
和onDestroyView
中实现它时,请查看代码段代码。 第一个问题已解决,但是打开了另一个问题,因为片段方向更改时,mode.finish()
会调用onDestroyView
ListView
中的已检查项目消失。onDestroyView()
方法时,我解决了第二个问题,但问题第一个问题再次打开。< / LI>
醇>
这是我的代码段:
//My ActionModeListener
private class MyActionMode implements AbsListView.MultiChoiceModeListener {
@Override
public void onItemCheckedStateChanged(ActionMode actionMode, int i, long l, boolean b) {
String nfile = ((DataFileProvider) adapter.getItem(i)).getNfile();
if (b) {
selections.add(nfile);
} else {
selections.remove(nfile);
}
actionMode.setTitle(selections.size() + " " + getString(R.string.item_selected));
}
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
mode = actionMode;
getActivity().getMenuInflater().inflate(R.menu.list_file_action_mode, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
actionMode.setTitle(selections.size() + " " + getString(R.string.item_selected));
return true;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
return true;
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
selections.clear();
mode = null;
showMessage("ListDocFileFragment : onDestroyActionMode");
}
}
当处理片段livecycle
时,这是我的代码段//My OnResume,OnPause,and OnDestroyView in Fragment
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
default_location = getArguments().getString("default_location");
}
if (getActivity().getIntent().hasExtra("ActionMode")) {
selections = getActivity().getIntent().getStringArrayListExtra("ActionMode");
}
}
@Override
public void onResume() {
super.onResume();
if(selections.isEmpty() && list_doc_file.getCheckedItemCount() > 0){
for (int i = 0; i < adapter.getCount(); i++) {
list_doc_file.setItemChecked(i, false);
}
selections.clear();
}
showMessage("ListDocFileFragment : onResume");
}
@Override
public void onPause() {
if (selections != null) {
getActivity().getIntent().putExtra("ActionMode", selections);
}
showMessage("ListDocFileFragment : onPause");
super.onPause();
}
@Override
public void onDestroyView() {
if(mode != null){
mode.finish();
}
showMessage("ListDocFileFragment : onDestroyView");
super.onDestroyView();
}
我的问题是如何解决上面的三个问题,没有打开像我这样的另一个问题?
我在这个堆栈中搜索另一个解决方案,但我一无所获。当我实施他们的解决方案时,它总会打开另一个问题。有什么建议吗?