android - 如何在 fragment 销毁方法上关闭 ListView 的上下文操作模式

标签 android android-fragments android-listview ondestroy

我已经成功地在 Fragment 中为 ListView 实现了 CAB,并且一切正常 -> 但是当我返回或通过抽屉导航更改显示的 fragment 时,CAB 保持打开状态。我需要做的是在 onDestroy 方法中关闭 CAB。我试过这个:

listView.clearChoices();
listView.cancelLongPress();

但是对CAB没有影响。这里有什么解决方案吗?

最佳答案

我发现处理这个问题的方法很简单:

1) 创建 ActionMode 类型的全局变量:

ActionMode actionMode = null;

2a) 在 onCreateActionMode() 方法中分配 ActionMode:

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
    getActivity().getMenuInflater().inflate(R.menu.action_mode, menu);
    actionMode = mode;
    return true;
}

2b) 也把它放在 onDestroyActionMode() 方法中:

@Override
public void onDestroyActionMode(ActionMode mode) {
    actionMode = null;
}

3) 覆盖 onDestroy() 方法(如果您想在每次 fragment 暂停时关闭 CAB,也可以使用 onPause() ,但这可能会让用户感到厌烦):

@Override
public void onDestroy() {
    super.onDestroy();

    //Destroy action mode
    if(actionMode != null)
        actionMode.finish();
}

就是这样,现在每次替换 Fragment 时,都会取消 ActionMode。

关于android - 如何在 fragment 销毁方法上关闭 ListView 的上下文操作模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27504045/

相关文章:

android - 在 Jetpack Compose 中使图像超出边界

android - TCP 问题 - 读取服务器响应时挂起

android - SearchView on support.v7.appcompat 库问题 : default 9-patch background not renders properly

java - 为什么要在onCreateView()中调用Fragment?

java - 如何在其他类中执行 fragmentTransaction?

android - 如何在从服务器获取数据时实现 ListView

android - Kotlin View 绑定(bind) java.lang.IllegalStateException : view must not be null inside listener

android - onResume() 和 onResumeFragments() 的区别

java - 从 OnActivityCreate() 获取适配器

java - 具有自定义光标适配器的 ListView 为空