java - 将菜单添加到 Activity 而不是 fragment

标签 java android android-fragments menu

我有一个 MainActivity 和一个 fragment 。我有一个刷新菜单选项,可以刷新数据(使用AsyncTask)。在 fragment 中膨胀刷新菜单选项与在 MainActivity 中膨胀有什么区别吗?

注意:这是 Udacity 的开发 Android 应用程序第 2 课的上下文。

最佳答案

是的,如果我理解正确的话,您想从 fragment 中扩展您的 Activity 工具栏菜单。如果是这种情况,你可以这样做

Yout Fragment类

   @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);
        }

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

如果您从 Activity 内扩充菜单,它将显示在您在 Activity 内加载的所有 fragment 中,但该操作仅对 activity 可用(如果您想要用菜单操作执行一些常规操作,例如启动新 Activity 、显示信息弹出窗口等)。如果您从 fragment 内扩充菜单,您将能够在 fragment 内处理菜单项,这将允许您根据当前 Activity 的 fragment 创建更具体的菜单操作。例如,如果您的 viewpager 具有 3 个不同的 fragment ,可以这样说:

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

假设您只想允许用户上传图像,并且您希望上传按钮位于菜单中。

如果您从 Activity 中膨胀菜单,您的上传按钮将在所有 fragment 中可见,并且您必须创建一个自定义/逻辑来显示隐藏菜单项。如果您从 fragment 中创建菜单,您将能够处理并显示所需 fragment 的菜单

长话短说,我认为这取决于 Activity/fragment 的用例以及您想用它实现的目标

关于java - 将菜单添加到 Activity 而不是 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37814363/

相关文章:

android - 如何检测 appium(java) 中 View 的变化 :android

java - aapt 使用 Runtime.exec()

android - fragment 状态丢失?

Android 12(SDK > 29)ACTION_IMAGE_CAPTURE 的 Extra_Output 不起作用

java - 当我们在 java 中有 response.setContentType 时,response.addHeader 有什么用

java - JBoss 4.2 - 同一 JBoss 上的多个应用程序处于 Debug模式?

java - 从 beforeInvocation 方法停止 Testng 测试

android - 配置更改后 Fragment.getArguments() 是否返回传递的参数?

android - 如何在单击时在单独的警报对话框中缩放 map fragment

java - 如何修复 java.lang.RuntimeException : Error creating extended parser class: null error in Jenkins?