[Разработка мобильных приложений, Разработка под Android] Safe Args — верный помощник Navigation Component
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В этой статье вы узнаете, кто такой этот Safe Args, как он упрощает жизнь и что является продуктом его работы, в том числе и за кулисами.Вы сейчас во второй части большого материала про Navigation Component в многомодульном проекте. Если вы впервые слышите про Navigation Component, то рекомендую сначала почитать, что вообще такое Navigation Component. Если уже знакомы с азами, то можно переходить к самому интересному:
- Работа с Navigation Component в многомодульном проекте совместно с SafeArgs.
- Решение для multistack-навигации
Safe Args — это плагин, идущий отдельно от Navigation Component, но созданный специально для того, чтобы с библиотекой работалось легче. С ним нет необходимости указывать id destination-а и передавать параметры через Bundle — плагин генерирует для этого отдельные классы и имеет набор extension-ов для работы с ними. Давайте разбираться, как это всё работает.Во-первых, вместе с плагином появился новый тег в xml: <argument>. Он применим и к action, и к destination — так можно передавать и принимать параметры в более удобном виде. Во-вторых, на основе экранов и переходов, указанных в графе, генерируются специальные классы, которые можно указывать в NavController-е вместо id action.Show me the code!
<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/graphuserflow”
app:startDestination=”@id/fragmentUserList”>
<fragment
android:id=”@+id/fragmentUserList”
android:label=”FragmentUserList”
android:name=”com.example.usersList.UserListFragment”
tools:layout=”@layout/fragmentuserlist”>
<action
android:id=”@+id/actiontouserdetails”
pp:destination=”@id/fragmentUserList” >
<argument
android:name=”userId”
app:argType=”integer”
app:nullable=”false” />
</action>
</fragment>
<fragment
android:id=”@+id/fragmentUserDetails”
android:label=”FragmentUserDetails”
android:name=”com.example.usersList.UserDetails”
tools:layout=”@layout/fragmentuser_details”/>
</navigation>
Здесь мы взяли: достаточно простой граф, где есть фрагмент, вложенный граф и переход от одного к другому. Единственная особенность — пресловутый <argument>, с помощью которого мы передаем в users details фрагмент параметр userId. Пересоберём проект и посмотрим, что получилось.
class UserListFragmentDirections private constructor() {
private data class ActionUserFromListToDetails(
val userId: Int
) : NavDirections {
override fun getActionId(): Int = R.id.actionToUserDetails
override fun getArguments(): Bundle {
val result = Bundle()
result.putInt(“userId”, this.userId)
return result
}
}
companion object {
fun actionToUserDetails(userId: Int): NavDirections =
ActionToUserDetails(userId)
}
}
В generated-папке модуля, где лежит граф, находим вот такой класс — обертку, которая включает в себя все переходы, указанные в графе с уже включенными туда параметрами. В нашем случае это переход на экран деталей пользователя и передача туда аргумента userId.Теперь вызов перехода будет выглядеть так:
navController.navigate(
UserListFragmentDirections.actionToUserDetails(userId)
)
А параметры в целевом destination-е можно получить через extension, который теперь у нас имеется.
private val args by navArgs<UserDetailsFragmentArgs>()
private val userId by lazy { args.userId }
Сам класс аргументов тоже генерируется в отдельный класс, который содержит методы упаковки и распаковки параметров в Bundle, но он уже не так интересен.В итогеSafe Args — приятное дополнение к Navigation Component, благодаря которому мы облегчили себе работу с id переходов и обработки получения/отправки их аргументов. Использовать его или нет — дело ваше, но дальнейшее повествование основано на использовании это плагина. Спойлер: он принесет немало проблем, но в конце все будут счастливы :)А теперь к самому интересному. Взглянем, как можно организовать работу с Navigation Component в многомодульном проекте совместно с SafeArgs и iOS-like multistack-навигацию.
===========
Источник:
habr.com
===========
Похожие новости:
- [Разработка мобильных приложений, Разработка под Android] Navigation Component и multi backstack navigation
- [Тестирование IT-систем, Разработка под Android] Тестирование From Zero to Hero. Часть 1
- [Программирование, Разработка мобильных приложений, Конференции, Flutter] Анонс вебинара «Почему компании всё чаще выбирают Flutter и что это значит для разработчиков»
- [Разработка под Android, Google API, Тестирование мобильных приложений, Аналитика мобильных приложений] Приложение отвечает: как мы уменьшили количество ANR-ошибок в шесть раз. Часть 1, про сбор данных (перевод)
- [Программирование, Разработка мобильных приложений, Dart, Flutter] Работа с асинхронностью в Dart
- [Разработка под iOS, Разработка мобильных приложений, Администрирование баз данных, Swift] Быстрый, простой, сложный: как мы выпилили Realm
- [Разработка мобильных приложений, Разработка под Android, Flutter] Все, что вам нужно знать о переходе с Flutter страницы (перевод)
- [Работа с видео, Разработка под Android, Софт] Видеоплеер заблокировали в Google Play за поддержку субтитров ASS
- [Разработка мобильных приложений, Законодательство в IT, Социальные сети и сообщества] Индия сделает запрет 59 китайских приложений постоянным
- [Python, Разработка мобильных приложений, Интерфейсы, Промышленное программирование] Открываем четыре Школы: разработки интерфейсов, бэкенда, мобильной разработки и дизайна
Теги для поиска: #_razrabotka_mobilnyh_prilozhenij (Разработка мобильных приложений), #_razrabotka_pod_android (Разработка под Android), #_android, #_navigation, #_navigation_component, #_razrabotka_mobilnyh_prilozhenij (
Разработка мобильных приложений
), #_razrabotka_pod_android (
Разработка под Android
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:53
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В этой статье вы узнаете, кто такой этот Safe Args, как он упрощает жизнь и что является продуктом его работы, в том числе и за кулисами.Вы сейчас во второй части большого материала про Navigation Component в многомодульном проекте. Если вы впервые слышите про Navigation Component, то рекомендую сначала почитать, что вообще такое Navigation Component. Если уже знакомы с азами, то можно переходить к самому интересному:
<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/graphuserflow” app:startDestination=”@id/fragmentUserList”> <fragment android:id=”@+id/fragmentUserList” android:label=”FragmentUserList” android:name=”com.example.usersList.UserListFragment” tools:layout=”@layout/fragmentuserlist”> <action android:id=”@+id/actiontouserdetails” pp:destination=”@id/fragmentUserList” > <argument android:name=”userId” app:argType=”integer” app:nullable=”false” /> </action> </fragment> <fragment android:id=”@+id/fragmentUserDetails” android:label=”FragmentUserDetails” android:name=”com.example.usersList.UserDetails” tools:layout=”@layout/fragmentuser_details”/> </navigation> class UserListFragmentDirections private constructor() {
private data class ActionUserFromListToDetails( val userId: Int ) : NavDirections { override fun getActionId(): Int = R.id.actionToUserDetails override fun getArguments(): Bundle { val result = Bundle() result.putInt(“userId”, this.userId) return result } } companion object { fun actionToUserDetails(userId: Int): NavDirections = ActionToUserDetails(userId) } } navController.navigate(
UserListFragmentDirections.actionToUserDetails(userId) ) private val args by navArgs<UserDetailsFragmentArgs>()
private val userId by lazy { args.userId } =========== Источник: habr.com =========== Похожие новости:
Разработка мобильных приложений ), #_razrabotka_pod_android ( Разработка под Android ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:53
Часовой пояс: UTC + 5