向活动添加菜单而不是片段

时间:2016-06-14 14:06:59

标签: java android android-fragments menu

我有一个MainActivity和一个片段。我有一个刷新菜单选项,用于刷新数据(使用AsyncTask)。对片段中的刷新菜单选项进行膨胀是否与MainActivity中相比有什么不同?

注意:这与Udacity开发Android应用程序,第2课有关。

1 个答案:

答案 0 :(得分:1)

是的,如果我理解正确,您想要从片段中膨胀您的活动工具栏菜单。如果是这种情况,你可以这样做

Yout Fragment class

   @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //setHasOptionsMenu is important 
            //it's telling the parent activity that he wants to participate in inflation of the menu
            setHasOptionsMenu(true);
        }



        //Rest of your methods (onCreateView, onPause, onResume etc...)


        @Override
        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
            //inflate the menu file
            inflater.inflate(R.menu.your_menu_xml, menu);
            super.onCreateOptionsMenu(menu, inflater);
        }

        @Override
        public boolean onOptionsItemSelected(android.view.MenuItem item) {

            switch (item.getItemId()) {

                case R.id.refresh:
                    //handle click
                    return true;
            }
            return super.onOptionsItemSelected(item);
        }

如果要在某些子片段中隐藏/显示菜单,也可以使用 setMenuVisibility(boolean)

如果您在活动中夸大菜单,它将显示在您在活动中加载的所有片段中,但该操作仅适用于活动(如果您这样做很好想要做一些菜单操作的常规内容,比如开始新活动,显示信息弹出窗口等)。如果从片段中膨胀菜单,您将能够处理包含片段的菜单项,这将允许您根据当前活动的片段创建更具体的菜单操作。例如,如果你有一个包含3个不同片段的viewpager,那就说:

  • 用于图像浏览的FragmentOne
  • FragmentTwo用于视频浏览
  • 用于文本浏览的FragmentThre

假设您希望仅允许用户上传图片,并且您希望该上传按钮位于菜单中。

如果您在活动中对菜单进行充气,您的上传按钮将在所有片段中显示,并且您必须创建用于显示隐藏菜单项的自定义/逻辑。如果您从片段中创建菜单,您将能够处理并显示所需片段的菜单

长话短说我认为这取决于活动/片段的用例以及你想用它实现的目标