web-dev-qa-db-fra.com

Safe Args: utilisez la liste des parcelles

J'utilise le plugin Safe Args avec les nouveaux composants de navigation pour mon Android. Maintenant, j'ai un argument qui est une liste de tableaux de parcelables, existe-t-il un moyen de l'utiliser avec les Safe Args Brancher?

Quelque chose comme app:argType=ParcelableArray. Cela devrait être possible car il existe des méthodes de regroupement comme putParcelableArrayList().

10
Dev Ste

Actuellement, je ne pense pas qu'il existe un moyen simple d'utiliser la liste des parcelables avec des arguments sûrs, mais j'ai trouvé un "hack" pour que cela fonctionne. Par exemple, j'ai un objet 'User' et il est parcelable, je déclare un nouvel objet parcelable 'Users' qui étendant ArrayList ().

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

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

Maintenant, je peux définir 'Users' comme argument dans la navigation

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

Et en passant la liste de tableaux de parcelles entre les destinations:

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

Et pour les récupérer sur une autre destination:

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

Mise à jour:

Prise en charge de la liste des objets venant en alpha8: https://issuetracker.google.com/issues/111487504

4
Alex

Oui, depuis la version 1.0.0-alpha08, vous pouvez désormais passer des tableaux d'objets parcellables comme celui-ci:

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

Pour passer des tableaux de types primitifs, utilisez par exemple pour app:argType="integer[]"

13
LaVepe

Une amélioration de la suggestion @LaVepe: comme pour Android Studio 3.4.2, vous pouvez passer un tableau Parcelable avec une fonction intégrée de l'éditeur de navigation en spécifiant des arguments pour la destination choisie. Cochez simplement l'option 'Tableau' après choisir votre classe Parcelable personnalisée qui ne doit être emballée dans aucune collection au préalable:

Example

1
kkaun