Android newbe在这里,我试图在MainActivity的膨胀菜单中获取菜单选项,以触发到另一个屏幕的导航,我遇到的问题是为findNavController()找到MainActivity的 View ,我需要在放置它的地方????,有人可以帮忙吗?
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(findViewById(R.id.toolbar))
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.menu_main, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
when (item.itemId) {
R.id.menu_settings -> {
val controller: NavController = Navigation.findNavController(????)
controller.navigate(R.id.settingsFragment)
}
else -> super.onOptionsItemSelected(item)
}
return true
}
}<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.ebookfrenzy.sos.MainActivity">
<item
android:id="@+id/menu_settings"
android:orderInCategory="11"
android:title="@string/action_settings"
app:showAsAction="never" />
<item
android:id="@+id/menu_removeads"
android:orderInCategory="20"
android:title="@string/remove_ads"
app:showAsAction="never" />
<item
android:id="@+id/menu_about"
android:orderInCategory="20"
android:title="@string/about"
app:showAsAction="never"/>
最佳答案
按照documentation的建议,您需要执行以下操作之一:
如何使用以上信息:
您的代码位于
MainActivity
中,因此您必须调用的函数是第3个Activity.findNavController(viewId: Int)
,而????
是viewId。什么是viewId:
viewId是
R.id.theIdentifierYouSetInYourXML
,因此您必须在代码中导航到在setContentView
方法中设置的布局,此布局称为R.layout.activity_main
或xml单词activity_main.xml
。在此文件中,应该有类似以下内容的内容:<?xml version="1.0" encoding="utf-8"?>
<!-- irrelevant code -->
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
...
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph" />
<!-- irrelevant code -->
FragmentContainerView
在这里很重要。我们需要它的ID。在上面的示例中,答案将是R.id.nav_host_fragment
。放在一起:
Navigation.findNavController(????)
将为Activity.findNavController(R.id.nav_host_fragment)
,但您必须在activity_main.xml
中检查代码以查找自己的ID。如果您的
activity_main.xml
中没有此代码,那么我建议从here开始。