J'ai créé Activité de tiroir de navigation , Comme nouveau format mis à jour de Activité de tiroir de navigation , Selon la nouvelle architecture Android Android, je l'ai eu avec Composant de navigation structure.
Le code NavigationView
avec NavController
et NavigationUI
comme ci-dessous, qui est un fragment d'ouverture lorsque je clique sur un élément de navigation.
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_profile, R.id.nav_privacy_policy,
R.id.nav_terms, R.id.nav_contact_us, R.id.nav_share, R.id.nav_send)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_Host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
C'est pour nav_Host_fragment
:
<fragment
Android:id="@+id/nav_Host_fragment"
Android:name="androidx.navigation.fragment.NavHostFragment"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation" />
La navigation se passe en utilisant ce navigation/mobile_navigation.xml
<?xml version="1.0" encoding="utf-8"?>
<navigation 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"
Android:id="@+id/mobile_navigation"
app:startDestination="@+id/nav_home">
<fragment
Android:id="@+id/nav_home"
Android:name="com.sohamerp.marsremedies.fragment.HomeFragment"
Android:label="@string/menu_home"
tools:layout="@layout/fragment_home" />
<fragment
Android:id="@+id/nav_profile"
Android:name="com.sohamerp.marsremedies.fragment.ProfileFragment"
Android:label="@string/menu_my_profile"
tools:layout="@layout/fragment_profile" />
<fragment
Android:id="@+id/nav_privacy_policy"
Android:name="com.sohamerp.marsremedies.fragment.PrivacyPolicyFragment"
Android:label="@string/menu_privacy_policy"
tools:layout="@layout/fragment_privacy_policy" />
<fragment
Android:id="@+id/nav_terms"
Android:name="com.sohamerp.marsremedies.fragment.TermsConditionFragment"
Android:label="@string/menu_terms"
tools:layout="@layout/fragment_terms_condition" />
<fragment
Android:id="@+id/nav_contact_us"
Android:name="com.sohamerp.marsremedies.fragment.ContactUsFragment"
Android:label="@string/menu_contact_us"
tools:layout="@layout/fragment_terms_condition" />
</navigation>
Maintenant, je veux passer quelques valeurs sous forme de bundle (arguments) dans Fragment lors de son appel.
Scénario: J'ai deux fragments PrivacyPolicyFragment
et TermsConditionsFragment
, dans les deux fragments, j'ouvre simplement le lien dans WebView en conséquence. Donc, lorsque je clique sur l'élément de menu de Privacy Policy
, Je passerai un lien en rapport avec le même.
Dans cette nouvelle structure navigation/mobile_navigation.xml
fragments d'ouverture, Comment puis-je passer des arguments?
De l'aide?
Vous pouvez implémenter NavigationView.OnNavigationItemSelectedListener
Et faites quelque chose comme ceci:
override fun onNavigationItemSelected(item: MenuItem): Boolean {
drawer_layout.closeDrawers()
if (item.itemId == nv_navigation_drawer_navigation_view.checkedItem?.itemId)
return false
Handler().postDelayed({
when (item.itemId) {
R.id.nav_privacy_policy -> {
val action = FragmentDirections.actionFragmentToPrivacyFragment("Policy link")
findNavController().navigate(action)
}
}
}, DRAWER_NAVIGATION_DELAY)
return true
}
Et en XML, vous pouvez ajouter un argument au fragment de réception, dans ce cas
<fragment
Android:id="@+id/nav_privacy_policy"
Android:name=".fragment.PrivacyPolicyFragment"
Android:label="@string/menu_privacy_policy"
tools:layout="@layout/fragment_privacy_policy">
<argument
Android:name="policy"
app:argType="string" />
</fragment>