Wrong fragment in ViewPager receives onContextItemSelected call

前端 未结 5 1967
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-28 12:00

I have an app that shows a few fragments (of the same type) in a ViewPager and I\'m having some trouble with context menu items. (I\'m using the support library

5条回答
  •  时光说笑
    2020-11-28 12:39

    Oh Google, I mean WTF?

    The problem is that onContextItemSelected is very generic, and it is called for each menu item of each fragment.

    You can use MenuItem.OnMenuItemClickListener to force fragment menu to not use all onContextItemSelected, but only same function of this fragment.

    Use next implementation:

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getActivity().getMenuInflater();
        if (v == btnShare) {
            inflater.inflate(R.menu.share_menu, menu);
            for (int i = 0; i < menu.size(); ++i) {
                MenuItem item = menu.getItem(i);
                item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        onContextItemSelected(item);
                        return true;
                    }
                });
            }
        }
    }
    
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        switch (item.getItemId()) {
            case R.id.print:
            // ...
        }
    }
    

提交回复
热议问题