Jetpackナビゲーションコンポーネントを使用しようとしています。そのため、ナビゲーションドロワーのメニューをクリックしたときに、目的地から別の目的地に移動する場合、ナビゲーションコンポーネントが自動的に処理します。
しかし、メニューがクリックされた場合にアクションを実行したい。たとえば、引き出しのメニューがクリックされた場合、トーストメッセージを表示したい。
古い方法、つまりフラグメントトランザクションを使用すると、から簡単に確認できonNavigationItemSelected
ますが、その方法は見つかりません。
では、ナビゲーションコンポーネントでそれを行う方法は?
確認しようとしましたonDestinationChanged
が、うまくいきません
override fun onDestinationChanged(controller: NavController, destination: NavDestination, arguments: Bundle?) {
if (destination.id == R.id.my_destination {
// show toast in here
// but it doesn't work
}
}
これが私のMainActivityです
class MainActivity : AppCompatActivity() {
private lateinit var navController : NavController
private lateinit var appBarConfiguration: AppBarConfiguration
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
appBarConfiguration = AppBarConfiguration(setOf(
R.id.destination_share,
R.id.destination_message,
R.id.destination_chat),
drawer_layout
)
// init nav controller
navController = Navigation.findNavController(this,R.id.nav_host_fragment)
// set toolbar
setSupportActionBar(toolbar)
// set up navigation drawer
NavigationUI.setupActionBarWithNavController(this,navController, appBarConfiguration)
NavigationUI.setupWithNavController(navigation_view,navController)
}
override fun onSupportNavigateUp(): Boolean {
return NavigationUI.navigateUp(navController,appBarConfiguration)
}
}
メニューのクリックは次のように処理できます
navView.menu.findItem(R.id.logout)
.setOnMenuItemClickListener { menuItem: MenuItem? ->
// write your code here
true
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加