#android #listview #android-contextmenu #multichoiceitems
#Android #просмотр списка #android-contextmenu #элементы с несколькими вариантами выбора #listview
Вопрос:
Я следую официальному руководству по использованию контекстного режима действий следующим образом:
listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.shelf_context, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// some processing...
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
});
Мой ListView находится внутри a Fragment
, который находится внутри a ViewPager
, поэтому я хочу скрыть панель контекстных действий, когда фрагмент становится невидимым. Но как мне это сделать? Я звоню listView.clearChoices()
, чтобы отменить выбор, но КАБИНА все еще видна:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (!isVisibleToUser) {
listView.clearChoices(); // CAB is still visible.
}
}
Ответ №1:
mode.finish()
не работает?
case R.id.action_remove:
mode.finish();
Комментарии:
1. Как насчет этого? 1. сохраните режим в
onCreateActionMode()
likemActionMode = mode
2. вызовитеmActionMode.finish()
входящийsetUserVisibleHint()
Ответ №2:
После некоторых исследований я нашел хакерский способ сделать это:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (!isVisibleToUser) {
listView.clearChoices();
listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL); // this strange hack dismisses the CAB.
}
}
Комментарии:
1. можете ли вы поделиться своим кодом? у меня это не работает ..!!