【问题标题】:Acessing the 'options' menu from a fragment? Android从片段评估“选项”菜单?安卓
【发布时间】:2014-09-06 13:04:25
【问题描述】:

我目前有一个有 4 个页面的应用程序,这些页面是由 pageViewer 使用片段添加的,以便我可以在它们之间滑动。

我想要的是能够从每个页面访问“选项”菜单(默认情况下其中包含“设置”项的菜单),以便我可以专门为一个页面执行命令,例如一个“刷新”项,用于刷新当前页面中的数据。

谁能指出我正确的方向? 谢谢!

【问题讨论】:

    标签: java android


    【解决方案1】:

    每个Fragment 都可以声明自己的菜单,该菜单会自动与当前活动的菜单合并。

    class YourPage extends Fragment
    {
    
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
    
            // Signal that this fragment has proper actions
            setHasOptionsMenu(true);
        }
    
        @Override
        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
        {
            super.onCreateOptionsMenu(menu, inflater);
    
            // The menu will be added to the action bar
            inflater.inflate(R.menu.fragment_page_menu, menu);      
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item)
        {
            switch (item.getItemId())
            {
                case R.id.action_refresh:
                {
                    // Handle the action...
    
                    return true;
                }
    
    
                default:
                    return super.onOptionsItemSelected(item);
            }       
        }   
    }
    

    这是我制作的完整的example,以及相关的tutorial

    【讨论】:

    • 其实只有一件事。这些项目现在在选项菜单中出现了两次(2xRefresh 项目,2xSettings 项目)我该如何让它只显示一个?
    • 问题是可见片段附近的片段也被加载了。仅当 getUserVisibleHint() 为 true 时尝试在片段中添加菜单。
    • 啊,我知道为什么了。在我的 OnCreateOptioneMenu() 中,我有以下代码:inflater.inflate(R.menu.main, menu);,这意味着这里也添加了菜单:P 感谢所有帮助!
    猜你喜欢
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多