Назад к вопросам
Junior
99
questionbank
Как связывать множество экранов в приложении?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
NavComponent (компонент навигации) из Android Jetpack.
- Fragment Nav Component: Для приложений на основе фрагментов. Определяет граф навигации с местами назначения (экранами) и действиями (переходами).
- Navigation Actions: Определяют, как перейти из одного места назначения в другое. Могут содержать аргументы.
- Safe Args: Gradle-плагин для генерации кода, обеспечивающего типобезопасную навигацию с аргументами.
- Navigation Graph: XML-ресурс, описывающий все места назначения и связи между ними.
<!-- res/navigation/nav_graph.xml -->
<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/nav_graph"
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.example.HomeFragment"
android:label="Home"
tools:layout="@layout/fragment_home">
<action
android:id="@+id/action_homeFragment_to_detailFragment"
app:destination="@id/detailFragment" />
</fragment>
<fragment
android:id="@+id/detailFragment"
android:name="com.example.DetailFragment"
android:label="Detail"
tools:layout="@layout/fragment_detail">
<argument
android:name="itemId"
app:argType="integer" />
</fragment>
</navigation>
// Переход с использованием Safe Args
findNavController().navigate(HomeFragmentDirections.actionHomeFragmentToDetailFragment(itemId = 123))
Альтернативы (менее предпочтительные):
- Intent: Классический способ для перехода между Activity. Менее гибок и сложнее управляется в сложных сценариях.
- FragmentTransaction: Для ручного управления добавлением, удалением и заменой фрагментов. Требует больше кода и подвержен ошибкам.
- Кастомные решения: Свои реализации управления экранами, часто излишне сложные.