Я делаю приложение похожим на это.
![v](https://i.stack.imgur.com/IUSou.png)
Круглые вещи - кнопки. И зеленая часть - Фрагмент.
А мой host_navigation.xml
состоит из фрагмента A, B, C.
Эти фрагменты принадлежат MainActivity
(и, конечно, он имеет fragment
представление) И нет <action>
(нет линий между фрагментами в дизайне), потому что я хочу открыть каждый из фрагментов случайным образом. Например, A-> B, B-> A C-> A, ... Где бы вы ни находились, вы можете перейти к определенному фрагменту.
Три круглые кнопки также относятся к MainActivity
.
Я нашел BottomNavigationView
или NavigationView
образцов. Тем не менее, они не кажутся чем-то, что я могу использовать в этом макете. Но поведение довольно похоже. просто макет другой.
Как я могу реализовать это и как я также могу естественным образом управлять поведением стека? Например, кнопка «Назад», и я хотел бы сохранить последние 3 фрагмента и удалить все предыдущие в стеке.
+
Это мой host_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/host_navigation"
app:startDestination="@id/aFragment">
<fragment android:id="@+id/aFragment"
android:name="com.example.AFragment"
android:label="fragment_a"
tools:layout="@layout/fragment_a"/>
<fragment android:id="@+id/bFragment"
android:name="com.example.BFragment"
android:label="fragment_b"
tools:layout="@layout/fragment_b"/>
<fragment android:id="@+id/cFragment"
android:name="com.example.CFragment"
android:label="fragment_c"
tools:layout="@layout/fragment_c">
</fragment>
</navigation>
А это activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<RelativeLayout
android:id="@+id/rl_tab_area"
android:layout_width="match_parent"
android:layout_height="105dp">
<Button
android:id="@+id/btn_a"
android:layout_width="50dp"
android:layout_height="50sp"
android:layout_alignParentTop="true"
android:src="@drawable/ic_a"
android:margin="5dp"
android:background="@drawable/btn_a"
/>
<Button
android:id="@+id/btn_b"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginTop="30dp"
android:layout_marginLeft="15dp"
android:layout_toRightOf="@id/btn_a"
android:background="@drawable/btn_b"/>
<Button
android:id="@+id/btn_c"
android:layout_width="200dp"
android:layout_height="100dp"
android:layout_alignParentRight="true"
android:background="@drawable/btn_c"/>
</RelativeLayout>
<fragment
android:id="@+id/fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_below="@+id/rl_tab_area"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/host_navigation">
</fragment>
</RelativeLayout>
Я думаю, мне нужно использовать это в MainActivity
val navController = Navigation.findNavController(this@MainActivity, R.id.host_navigation)
Если, если использовать NavigaitonBottomView
Тогда, я могу передать это значение ему, но я понятия не имею, потому что я его не использую.
Я пытался назвать другие фрагменты этим
Navigation.findNavController(this, R.id.fragment).navigate(R.id.aFragment)
И попробовал
Navigation.findNavController(this, R.id.host_navigation).navigate(R.id.aFragment)
Navigation.findNavController(R.id.host_navigation).navigate(R.id.aFragment)
findNavController(R.id.host_navigation).navigate(R.id.aFragment)
И другие способы тоже. Но пока никто из них не работал.