【问题标题】:Menu popup helper cannot be used without anchor菜单弹出助手不能在没有锚的情况下使用
【发布时间】:2014-07-08 14:15:38
【问题描述】:

我想在操作栏中使用弹出菜单项。当我在 Activity 中使用它时一切正常,但是当我切换到片段时,我得到:

MenuPopupHelper cannot be used without an anchor

我的片段:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    
    switch(item.getItemId()) {
        case R.id.action_filter:
            createCategoriesPopupMenu(item);
            return true;
        case R.id.action_sort:
            createSortPopupMenu(item);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}


private void createSortPopupMenu(MenuItem item)
{
    PopupMenu popup;
    
    final View menuItemView = getView().findViewById(item.getItemId());
    
    Log.wtf("d","item getitemid"+item.getItemId());
    
    if (menuItemView == null)
    {
        Log.wtf("d","menuItemView==null view"+view.findViewById(item.getItemId()));
        Log.wtf("d","menuItemView==null getAc"+getActivity().findViewById(item.getItemId()));
        
        //final View searchItemView = getView().findViewById(R.id.action_search);
        //popup = new PopupMenu(getActivity(), searchItemView);
    }

        popup = new PopupMenu(getActivity(), menuItemView);

    Menu menu = popup.getMenu();
    
    addSortMenuItems(menu);

    popup.setOnMenuItemClickListener(new OnMenuItemClickListener()
    {
        @Override
        public boolean onMenuItemClick(MenuItem item)
        {
            onSortMenuItemClick(item);
            return true;
        }
    });

    popup.show();
}   
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.issues_list_menu, menu);

    super.onCreateOptionsMenu(menu, inflater);
}

控制台输出(断言):

07-08 14:08:16.659: A/d(1677): 项目 getitemid2131165600 07-08

14:08:16.659: A/d(1677): menuItemView==null viewnull 07-08

14:08:16.663: A/d(1677): menuItemView==null getAcnull

我没有忘记 setHasOptionsMenu(true);在 onCreateView() 而view 是来自onCreateView() 的膨胀布局

【问题讨论】:

  • 你确定 menuItemView 不为空吗?
  • @blackbelt 我知道它是空的,但不知道为什么。

标签: java android android-activity android-fragments


【解决方案1】:

好的,我在 xml 菜单文件中找到了解决方案,我们要添加我们需要设置的弹出窗口

android:showAsAction="always"

因为弹出窗口仅适用于操作栏中的图标,而不适用于菜单中的图标。也使用 getActivity().findView... 而不是 getView().findView...

【讨论】:

  • android:showAsAction="always" 不是原因,但主要问题是没有使用getActivity().findView...。编辑我测试过的答案。
  • @ahmadalibaloch 主要问题是空操作视图。因此,将菜单项显示为操作视图可以解决问题。
【解决方案2】:

你可以改变

final View menuItemView = getView().findViewById(item.getItemId());

final View menuItemView = getActivity().findViewById(item.getItemId());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-08
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多