如何从 MenuItem 导航到片段(Android)?

Posted

技术标签:

【中文标题】如何从 MenuItem 导航到片段(Android)?【英文标题】:How can I navigate from the MenuItem to a fragment (Android)? 【发布时间】:2021-08-20 01:29:43 【问题描述】:

我有一个MainActivity 和 3 个不同的片段。我在MainActivity 中创建的工具栏出现在我拥有的所有 3 个片段中。我可以使用按钮在这些片段之间切换。

举个例子;

binding.buttonSelectFile.setOnClickListener(v -> NavHostFragment.findNavController(FirstFragment.this)
                .navigate(R.id.action_FirstFragment_to_ThirdFragment));

我想为工具栏项创建类似的行为。例如,每次用户按下定义如下的“帮助”项时,我希望应用程序导航到HelpFragment

<menu 
    <!-- other items -->
    <item
        android:id="@+id/action_help"
        android:orderInCategory="100"
        android:title="@string/action_help"
        app:showAsAction="never" />
</menu>

我试图在 MainActivity 类的 onCreate() 方法中做这样的事情,纯粹是猜测。

binding.toolbar.getMenu().getItem(R.id.action_help).setOnMenuItemClickListener(item -> 
            Navigation.findNavController(view).navigate(R.id.HelpFragment);
            return true;
        );

但是,这种方法当然是不正确的。

可以这样使用吗?还是应该按照其他方式向用户显示帮助屏幕?

【问题讨论】:

如何在工具栏中构建项目.. 是supportActionBar,还是布局中的自定义工具栏? 我正在为它调用 setSupportActionBar() 方法。 【参考方案1】:

我正在为它调用 setSupportActionBar() 方法

因此,action_help 菜单项是默认选项菜单的一部分。然后你需要覆盖onCreateOptionsMenu() 来膨胀菜单,并覆盖onOptionsItemSelected 来处理对R.id.action_help 菜单项的点击。

@Override
public boolean onCreateOptionsMenu(Menu menu) 
    getMenuInflater().inflate(R.menu.my_menu, menu); // replace "my_menu" with the name of your menu xml file
    return true;



@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) 

    if (item.getItemId() == R.id.action_help) 
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); // replace "nav_host_fragment" with the id of your navHostFragment in activity layout
        navController.navigate(R.id.HelpFragment);
        return true;
     
    return super.onOptionsItemSelected(item);


【讨论】:

非常感谢,我之前看过“nav_host_fragment”部分,但不明白它们的意思。你的回答很清楚。

以上是关于如何从 MenuItem 导航到片段(Android)?的主要内容,如果未能解决你的问题,请参考以下文章

使用Android导航组件时如何从后台获取片段?

如何从一个片段导航到另一个片段?

如何在改变sharedpreferences数据后自动改变android menuItem数据?

如何使用新的导航架构组件从扩展 BroadcastReceiver 的类导航到片段

Android:如何在选项卡内从一个片段导航到另一个片段? [关闭]

如何确定后退按钮按下