如何在片段破坏方法上关闭ListView的上下文动作模式

时间:2014-12-16 11:52:26

标签: android android-fragments android-listview ondestroy

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

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

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

2 个答案:

答案 0 :(得分:7)

我发现如何处理这个很简单的方法:

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()方法(如果要在每次片段暂停时关闭CAB,也可以使用onPause(),但这可能会让用户烦恼):

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

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

那就是它,现在每次你取代Fragment时,它都会取消ActionMode。

答案 1 :(得分:1)

这样的东西应该用于后退按钮:

@Override
public void onBackPressed() {
    actionmode.finish(); // Replace with reference to your CAB.
}

您可以将相同的命令放入按钮逻辑中。