【问题标题】:Show menu actions only in certain fragments - NavigationComponents仅在某些片段中显示菜单操作 - 导航组件
【发布时间】:2019-12-20 14:56:20
【问题描述】:

我有一个导航主机活动,它膨胀了 2 个片段,一个是主主机片段和事件片段,我需要在事件片段中显示一个菜单操作,但是这个菜单操作也显示在我没有的主片段中想展示

如何仅在事件片段中显示此菜单?

主要活动

class MainActivity: AppCompatActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)

            val navController = Navigation.findNavController(this, R.id.nav_host_fragment)
            setupActionBar(navController)
        }

        private fun setupActionBar(navController: NavController) {
            NavigationUI.setupActionBarWithNavController(this, navController)
        }

        override fun onSupportNavigateUp(): Boolean {
            return Navigation.findNavController(this, R.id.nav_host_fragment).navigateUp()
                    || super.onSupportNavigateUp()
        }

        override fun onCreateOptionsMenu(menu: Menu?): Boolean {
            MenuInflater(this).inflate(R.menu.menu, menu)
            return super.onCreateOptionsMenu(menu)
        }

        override fun onOptionsItemSelected(item: MenuItem?): Boolean {
            NavigationUI.onNavDestinationSelected(item!!, Navigation.findNavController(this, R.id.nav_host_fragment))
            return super.onOptionsItemSelected(item)
        }

菜单

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/eventsFragment"
        app:showAsAction="ifRoom|always"
        android:title="¿ Where to buy ?" />

</menu>

我只需要在 eventsFragment 中显示这个菜单

事件片段

class EventsFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_event, container, false)
    }

但是它不仅在 EventFragment 中显示它,它还在 MainActivity 作为主机膨胀的第一个片段中显示它

我怎样才能在我的 EventsFragment 中有这个菜单?

【问题讨论】:

    标签: android android-fragments kotlin navigation android-architecture-navigation


    【解决方案1】:

    在 MainActivity menuItem setVisible(false):

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
      MenuInflater(this).inflate(R.menu.menu, menu)
      val menuItem : MenuItem = menu.findItem(R.id.eventsFragment);
       if (menuItem!= null)
           menuItem.setVisible(false);
       return super.onCreateOptionsMenu(menu)
     }
    

    在EventsFragment中设置menuitem的visibility为true如下图:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setHasOptionsMenu(true)
    
    }
    
    override fun onPrepareOptionsMenu(menu: Menu) {
        val menuItem = menu.findItem(R.id.eventsFragment)
        if (menuItem != null)
            menuItem.isVisible = true
    }
    

    【讨论】:

      【解决方案2】:

      您可以尝试考虑从片段内部膨胀菜单。 IE。片段onCreate() 方法并从片段的onDestroy() 函数中销毁它

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-03
        • 2021-08-13
        • 1970-01-01
        • 2019-12-07
        • 2019-02-23
        • 2019-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多