私はナビゲーションの初心者です。ナビゲーションコンポーネントの開始宛先と最上位の宛先が同じではないため、AppBarConfiguration
を使用してカスタムの最上位の宛先を使用しましたが、NavigationViewをnavController
で設定したい場合NavigationUI.setupWithNavController(binding.navView, navController)
を使用して、ドロワーアイテムでナビゲーションコンポーネントを設定しますが、ナビゲーションドロワーでアイテムを押して別のフラグメントに移動し、戻るボタンを押して、最高の目的地。それは私に開始の目的地を示していますが、カスタムのトップの目的地を表示したいのですが、これはそれらのメインアクティビティコードです。
import androidx.appcompat.app.AppCompatActivity
import Android.os.Bundle
import androidx.databinding.DataBindingUtil
import androidx.drawerlayout.widget.DrawerLayout
import androidx.navigation.NavController
import androidx.navigation.NavDestination
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.NavigationUI
import com.example.Android.pass.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var drawerLayout: DrawerLayout
private lateinit var appBarConfiguration: AppBarConfiguration
private lateinit var binding: ActivityMainBinding
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setTheme(R.style.AppTheme)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
val toolbar= binding.toolbar
drawerLayout = binding.drawerLayout
navController = this.findNavController(R.id.myNavHostFragment)
setSupportActionBar(toolbar)
navController
.addOnDestinationChangedListener { nc: NavController, nd: NavDestination, args: Bundle? ->
if (nd.id == R.id.accountListFragment) {
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
} else {
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
}
}
val topLevelDestinations = setOf(R.id.accountListFragment)
appBarConfiguration = AppBarConfiguration.Builder(topLevelDestinations)
.setDrawerLayout(drawerLayout)
.build()
NavigationUI.setupWithNavController(binding.navView, navController)
NavigationUI.setupWithNavController(toolbar,navController,appBarConfiguration)
}
override fun onSupportNavigateUp(): Boolean {
return NavigationUI.navigateUp(navController,appBarConfiguration)
}
}
これは、ナビゲートしたいフラグメントを持つ同じIDの2つの項目を含む私の引き出しメニューです。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools">
<item
Android:id="@+id/aboutFragment"
Android:icon="@drawable/question"
Android:title="About" />
<item
Android:id="@+id/settingsFragment"
Android:icon="@drawable/settings"
Android:title="settings" />
</menu>
次のコードを使用してnavigationView
をnavController
に設定する代わりに、答えを見つけました:NavigationUI.setupWithNavController(binding.navView, navController)
メインアクティビティで次のコードを使用しました:
binding.navView.setNavigationItemSelectedListener(this)
override fun onNavigationItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.about_item -> navController.navigate(R.id.aboutFramgent)
R.id.settings_item -> navController.navigate(R.id.settingsFramgent)
}
return true
}
これを使用:
AppBarConfiguration appBarConfiguration =
new AppBarConfiguration.Builder(navController.getGraph()).build();
:の代わりに
appBarConfiguration = AppBarConfiguration.Builder(topLevelDestinations)