Safe Args: используйте список посылок - PullRequest
0 голосов
/ 28 ноября 2018

Я использую плагин Safe Args с новыми компонентами навигации для моего проекта Android.Теперь у меня есть аргумент, который представляет собой список массивов пакетов, есть ли способ использовать это с плагином Safe Args?

Что-то вроде app:argType=ParcelableArray.Это должно быть возможно, так как существуют такие методы, как putParcelableArrayList().

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Да, начиная с версии 1.0.0-alpha08, теперь вы можете передавать массивы разбираемых объектов следующим образом:

<argument
  android:name="users"
  app:argType="com.navigation.test.User[]"/>

Для передачи массивов примитивных типов используйте, например, app:argType="integer[]"

0 голосов
/ 17 июля 2019

Улучшение предложения @LaVepe: как и в Android Studio 3.4.2, вы можете передать массив Parcelable со встроенной функцией редактора навигации, указав Аргументы для выбранного места назначения.Просто выберите опцию «Массив» после выбора своего пользовательского класса Parcelable, который не должен быть заранее включен ни в одну коллекцию:

Example

0 голосов
/ 29 ноября 2018

В настоящее время я не думаю, что есть простой способ использовать список посылок с безопасными аргументами, но я нашел некоторый «взлом», чтобы сделать эту работу.Например, у меня есть объект «Пользователь», и он может быть отправлен, я объявляю новый объект «Пользователи», который расширяет ArrayList ().

@Parcelize
data class User(var name: String, val age: Int): Parcelable

@Parcelize
class Users: ArrayList<User>(), Parcelable

Теперь я могу установить «Пользователи» в качестве аргумента в навигации

<argument
      android:name="users"
      app:argType="com.navigation.test.Users"/>

И передача массива списка посылок между получателями:

 val user=User("Alex", 36)
 val users= Users()
 users.add(user)
 val action=MainFragmentDirections.actionMainFragmentToSecondFragment(users)
 NavHostFragment.findNavController(this@MainFragment).navigate(action)

И для извлечения их по другому получателю:

val users=SecondFragmentArgs.fromBundle(arguments).users
val user=users[0]
txtViewName.text=user.name
txtViewAge.text="${user.age}"

Обновление:

Поддержка списка объектов, поступающих в alpha8: https://issuetracker.google.com/issues/111487504

...