avant-propos
J'ai récemment commencé à apprendre Android Bien que les paramètres de l'interface soient très similaires au Web, de nombreux détails sont complètement différents. J'ai écrit une APP, j'ai besoin de passer d'un fragment à un autre
Mise en œuvre
Créer une navigation (carte de navigation)
Sous le dossier res dans le projet Android - clic droit - nouveau - Fichier de ressources Android - Type de ressource sélectionnez Navigation
Un dossier de navigation sera automatiquement généré dans le projet, et le fichier xml nouvellement créé y sera placé
Après la génération, cliquez sur la page de conception, cliquez pour ajouter deux fragments, pointez la flèche sur le côté du fragment vers le fragment vers lequel sauter, revenez à la page de code après le réglage, nous pouvons voir qu'il y a une <action > tag, et l' id à l'intérieur est notre suivi L'id qui doit être parcouru.
La page Code est la suivante :
<fragment
android:id="@+id/navigation_today"
android:name="com.tdsss.healthdemo1.fragment.HomeFragment"
android:label="今天"
tools:layout="@layout/fragment_home" >
<action
android:id="@+id/action_navigation_today_to_editStepDialogFragment"
app:destination="@id/editStepDialogFragment" />
</fragment>
Créer un NavController dans MainActivity
activity_main.xml
<fragment
android:id="@+id/nav_host"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@id/nav_view"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/step_navigation" />
MainActivity.java
Obtenez le contrôleur de navigation pour implémenter la barre de navigation en bas de la page
// 获取页面上的底部导航栏控件
BottomNavigationView navView = findViewById(R.id.nav_view);
// 配置navigation与底部菜单之间的联系
// 底部菜单的样式里面的item里面的ID与navigation布局里面指定的ID必须相同,否则会出现绑定失败的情况
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
R.id.navigation_today,R.id.navigation_history,R.id.navigation_health,R.id.navigation_mine)
.build();
// 建立fragment容器的控制器,这个容器就是页面的上的fragment容器
NavController navController = Navigation.findNavController(this, R.id.nav_host);
// 启动
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(binding.navView, navController);
Implémenter le saut dans le fragment enfant
Définissez un bouton dans le fragment enfant, qui peut passer à un autre fragment après avoir cliqué
Ici, la valeur id dans la méthodenaviguer() est la valeur id dans notre balise <action> ci-dessus
Par exemple : cliquez sur le bouton de la page d'accueil pour accéder à une boîte de dialogue Fragment
Une partie du code est la suivante : (un contrôle ImageButton doit être défini dans le fichier xml, qui est omis ici)
HomeFragment.java
private ImageButton editStepButton;
private Activity mainActivity;
...
mainActivity = getActivity();
editStepButton = root.findViewById(R.id.edit_step_icon);
editStepButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Navigation.findNavController(mainActivity,R.id.nav_host).navigate(R.id.action_navigation_today_to_editStepDialogFragment);
}
});