片段中不适当的上下文菜单

Den*_*nis 6 android android-fragments android-contextmenu navigation-drawer

我有一个带有导航抽屉和片段的活动.他们每个人都有自己的ListView和上下文菜单.

导航抽屉内的上下文菜单工作正常.

问题在于片段内的菜单.当我进入片段的上下文菜单时,会显示两个导航抽屉菜单和片段的菜单.

活动的方法

@Override
protected void onCreate(Bundle savedInstanceState) {
    registerForContextMenu(mDrawerList); // mDrawrList is the navigation drawer's ListView
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    switch(item.getItemId()) {
    case R.id.action_edit:
        // Do some stuff
        return true;
    case R.id.action_delete:
        // Do some stuff
        return true;
    }
    return super.onContextItemSelected(item);
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.drawer, menu);
}
Run Code Online (Sandbox Code Playgroud)

片段的方法

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    setHasOptionsMenu(true);
    mListView = (ListView) view.findViewById(R.id.list);
    registerForContextMenu(mListView);
    // ...
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    switch(item.getItemId()) {
    case R.id.action_edit:
        // Do some stuff
        return true;
    case R.id.action_delete:
        // Do some stuff
        return true;
    }
    return super.onContextItemSelected(item);
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    getActivity().getMenuInflater().inflate(R.menu.fragment_menu, menu);
}
Run Code Online (Sandbox Code Playgroud)

先感谢您.

Den*_*nis 15

解决了.

问题在于活动onCreateContextMenu被称为.

我刚刚super.onCreateContextMenu(menu, v, menuInfo);从片段的onCreateContextMenu方法中删除了.

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {

    getActivity().getMenuInflater().inflate(R.menu.fragment_menu, menu);
}
Run Code Online (Sandbox Code Playgroud)

希望它能帮助别人.