ListView: скрыть контекстную панель действий

#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() like mActionMode = 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. можете ли вы поделиться своим кодом? у меня это не работает ..!!