【问题标题】:onContextItemSelected fragment instance issue [duplicate]onContextItemSelected 片段实例问题[重复]
【发布时间】:2015-01-09 08:00:24
【问题描述】:

我的活动包含两个片段,用同一个类实例化。

使用上下文菜单,当我从第二个片段/列表视图中选择菜单操作时,记录实例成员显示仅从第一个片段实例调用 onContextItemSelected:

public class LikedFragment extends Fragment {

    @Override public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mMyInstanceId = getArguments().getString("fragmentId"); // "first" or "second"
    }

    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mView = inflater.inflate(R.layout.my_fragment, container, false);
        mAdapter = new MyAdapter(mActivity, MyQueries.getMyCursor(mMyInstanceId));

        AbsListView listView = (AbsListView) mView.findViewById(android.R.id.list);
        listView.setAdapter(mAdapter);
        listView.setOnCreateContextMenuListener(this);
        return mView;
    }

    @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        getActivity().getMenuInflater().inflate(R.menu.menu_item_liked, menu);
        Log.d(TAG, mMyInstanceId); // OKAY: logs "second" 
    }

    @Override public boolean onContextItemSelected(MenuItem item) {
        Log.d(TAG, mMyInstanceId); // FAIL: logs "first"
        /* ... */
    }

}

如何在 onContextItemSelected 中获取正确的实例?

【问题讨论】:

  • 什么是 mMyInstanceId?
  • 一个字符串作为bundle参数传递来区分两个片段实例,我会更新代码

标签: android android-fragments


【解决方案1】:

只需使用组 ID 即可解决此问题。只需为两个片段分配不同的组 ID,然后在 onContextItemSelected 中检查它们,如下所示。

public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) 
{
menu.add(GROUP_ID, MENU_1, 0, "Menu 1");
menu.add(GROUP_ID, MENU_2, 0, "Menu 2");
}

public boolean onContextItemSelected(MenuItem item) 
{
//only this fragment's context menus have group ID of -1
if (item.getGroupId() == GROUP_ID) 
{
    //Your Code Will Be Added Here
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 2016-05-10
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多