Вы можете проверить do c:
Определите на своем графике что-то вроде:
<fragment android:id="@+id/a"
android:name="com.example.myapplication.FragmentA"
android:label="a"
tools:layout="@layout/a">
<action android:id="@+id/action_a_to_b"
app:destination="@id/b"/>
</fragment>
<fragment android:id="@+id/b"
android:name="com.example.myapplication.FragmentB"
android:label="b"
tools:layout="@layout/b">
</fragment>
, а затем просто используйте для навигации:
findNavController().navigate(R.id.action_a_to_b)
Проверьте также эту страницу :
Добавление верхней панели приложения к вашему занятию хорошо работает, когда макет панели приложения одинаков для каждого пункта назначения в вашем приложении. Если, однако, верхняя панель приложения существенно меняется в зависимости от места назначения, рассмотрите возможность удаления верхней панели приложения из активности и вместо этого определения ее в каждом фрагменте назначения.
В FragmentB
в onCreateView
вы можете расширить свой макет
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val root = inflater.inflate(R.layout.fragment_B container, false)
В этом макете вы можете поместить Toolbar
:
<LinearLayout>
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
... />
...
</LinearLayout>
и:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val navController = findNavController()
val appBarConfiguration = AppBarConfiguration(navController.graph)
view.findViewById<Toolbar>(R.id.toolbar)
.setupWithNavController(navController, appBarConfiguration)
}
Альтернативный - настроить навигацию в Activity и использовать OnDestinationChangedListener
:
navController.addOnDestinationChangedListener { _, destination, _ ->
if(destination.id == R.id.b) {
toolbar.visibility = View.GONE
//....
} else {
toolbar.visibility = View.VISIBLE
//.....
}