【问题标题】:ListFragment - How do I add a menu?ListFragment - 如何添加菜单?
【发布时间】:2013-01-15 22:16:04
【问题描述】:

我有一个 ListFragment,我必须添加一个菜单。这是我的代码: 列表用户菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/any_option"
    android:title="In Context Menu" />
</menu>

我的 ListFragment:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    View mFooterView;
    // We need to use a different list item layout for devices older than Honeycomb
    int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
    android.R.layout.simple_list_item_activated_1:android.R.layout.simple_list_item_1;
    if(getListAdapter()==null){
        // init adapter
        adapter=new UserArrayAdapter(getActivity(),
                MOBILE_OS);
    }
    else{
            adapter.notifyDataSetChanged(); 
        } 

    // set adapter
    registerForContextMenu(getListView());
    setListAdapter(adapter);

}
@Override
public void onCreateContextMenu(final ContextMenu menu, final View v,
final ContextMenuInfo menuInfo){
    menu.clear();
    super.onCreateContextMenu(menu, v, menuInfo);   
    final MenuInflater inflater = getActivity().getMenuInflater();
    inflater.inflate(R.menu.listuser_menu, menu);   
}

但我看不到我的菜单..为什么?如何注册选项菜单选择?谢谢!

【问题讨论】:

    标签: android android-layout android-fragments android-listfragment


    【解决方案1】:

    可以在片段中添加菜单,请在片段中使用以下代码:

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
    setHasOptionsMenu(true);
    

    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.listuser_menu, menu);
    }
    

    使用 setHasOptionsMenu 将允许您的片段显示菜单。

    【讨论】:

    • 在我的 FragmentActivity 为什么我不能覆盖 onCreateOptionsMenu?我使用 android support v4..
    • 代码不应该被添加到FragmentActivity中,它应该被添加到你的Fragment/ListFragment中
    【解决方案2】:

    在您的 MainActivity 中使用此示例代码。

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            super.onCreateOptionsMenu(menu);
    
    
    
            SubMenu subMenu1 = menu.addSubMenu("Action Item");
            subMenu1.add(0, 1, 0, "Sample");
            subMenu1.add(0, 2, 0, "Menu");
            subMenu1.add(0, 3, 0, "Sair");
    
            MenuItem subMenu1Item = subMenu1.getItem();
            subMenu1Item.setIcon(R.drawable.ic_title_share_default);
            subMenu1Item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    
    
    
    
            return true;
        }
    

    【讨论】:

      【解决方案3】:

      是的,您可以将菜单添加到 ListFragment,将以下代码添加到您的 ListFragment

         @Override
      public void onActivityCreated(Bundle savedInstanceState) {
          super.onActivityCreated(savedInstanceState);
          setHasOptionsMenu(true);
      }
      

      然后添加 Fragment 版本的 onCreateOptionsMenu() 方法,如下所示

         @Override
      public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {     
          super.onCreateOptionsMenu(menu, inflater);
          inflater.inflate(R.menu.menu_xml, menu);
      }
      

      @Sherlock Yiu 忘记在 onActivityCreated() 方法中添加“super.onActivityCreated(savedInstanceState);”,其余相同。

      别忘了在项目库中添加“android-support-v4.jar”。

      上面的代码 sn-p 对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-04
        • 2017-02-18
        • 2019-10-02
        • 2015-02-24
        • 2011-01-02
        • 1970-01-01
        相关资源
        最近更新 更多