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 находится внутри Fragment
, который находится внутри ViewPager
, поэтому я хочу скрыть контекстную панель действий, когда фрагмент становится невидимым. Но как мне это сделать? Я вызываю listView.clearChoices()
, чтобы очистить выделение, но кабина все еще видна:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (!isVisibleToUser) {
listView.clearChoices(); // CAB is still visible.
}
}
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. } }