android - 如何从 MenuItem 导航到 fragment (Android)?

标签 android android-fragments android-activity android-toolbar android-navigation

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

举个例子;

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

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

这样的用途可行吗?还是我应该按照另一种方式向用户显示帮助屏幕?

最佳答案

I am calling the setSupportActionBar() method for it

因此,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);

}

关于android - 如何从 MenuItem 导航到 fragment (Android)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67795799/

相关文章:

android-fragments - 带有 findFragmentById 的 ClassCastException

android - 带有 ShareActionProvider 的共享按钮在操作栏上添加了两次

android - 关于 toast 和 Activity 更改的 WindowManager$BadTokenException

android - 强制关键帧是什么意思?

Android Studio 不断用固定的 dp 值替换 match_parent

Android - 删除 Google Maps Fragment onPause 并重新添加 onResume

android - "visibility"在 Activity 生命周期中指的是什么? onPause vs onStop?

android - 为什么我不能通过引用启动 Activity ?

Android SDK 功能未实现

android - 地点查找器 Android 应用程序中用户可以将地点上传到服务器?