如何从 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)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在改变sharedpreferences数据后自动改变android menuItem数据?
如何使用新的导航架构组件从扩展 BroadcastReceiver 的类导航到片段