Blocage de transfert de donnée ModelView / Interface

Hello tout le monde , j’espère que tout va pour le mieux en cette belle journée de Vendredi :tophat:

Je voulais avoir vos conseils sur un souci que je rencontre en ce moment dans la transmission de certaines de mes données d’une activité vers un ModelView.

J’ai fait un petit schéma pour que vous compreniez mieux ( à lire de la gauche vers la droite):

Le hic: même si la création de ma liste de cartes dans mon activité a l’air de bien se passer ( puisque je force l’affichage de certains éléments de la liste pour être sur qu’elle est bien créé + j’ai vérifié avec RealmStudio que la base de donnée est bien renseignée) j’ai l’impression que la phase de réception de cette liste par le Model View ( à travers l’interface) ne se passe pas correctement.

En menant l’enquête sur plusieurs sites j’ai vu que le fait de passer par une activité pour créer mes cartes de visites fait que les données qui sont censées être injectées dans l’interface peuvent être perdues dés que l’activité est fermée ( j’applique un finish() pour revenir à mon fragment).

Aussi, un des potentiels coupables pourrait être le fait qu’a un aucun moment je ne précise dans mon activité à quelle instance du ModelView je souhaite envoyer mes données. En effet lors de la création d’un Fragment on crée une variable qui instancie la classe ModelView or c’est bien cet objet qui doit être appelée (dans mon activité de création) quand je souhaite lui envoyer des données. Dans mon cas, pour transmettre les données au model View du fragment je me suis limité à créer un objet ModelView dans mon activité sur lequel je suis venu greffer ma logique de réception de donnée. Je sens que tout ça c’est No bueno mais Android Studio lui me dit t"inquiètes roules ma poule.

J’ai plusieurs pistes de contournement, par exemple dire au ModelView d’aller piocher directement dans ma base de donnée Realm plutôt que de passer par l’interface, ou alors changer mon activité en Fragment comme ça les deux fragments peuvent communiquer a travers le ModelView qui fera passerelle.

Mais je souhaiterai quand même comprendre pourquoi ce que j’ai fait jusque la ne marche pas. Si vous avez des pistes je suis preneur.

Si mes explications ne sont pas claire je peux détailler plus avec du code source. Dites moi.

Merci :v:

Juste pour être clair, je vais te résumer ce que j’ai compris :

  1. Ton fragment avec RecyclerView est déjà affiché à l’écran et possède des cartes affichées. Il possède déjà un ModelView instancié automatiquement.
  2. Puis tu affiches une nouvelle activité pour créer une nouvelle carte (via un bouton ?) et à la fin du fermes cettes activité avec un finish()
  3. Cette activité crées un autre objets ModelView (qui est forcément différent de celui du fragment)
  4. Dans cette activité tu crées des données puis tu les enregistres dans Realm et tu essaies de les renvoyer vers ton fragment initial

C’est bien ça ?

Yes c’est bien ça. Quelques précisions:

  1. Jusque la aucune donnée n’a pu être affichée dans mon recycler View, mais il est bien implémenté. (et je pars bien de ce fragment pour ouvrir l’activité de création d’une nouvelle carte)

  2. Oui, j’ai un bouton de création qui reprend les informations utilisateur, et crée un nouvel objet " carte" qu’il rajoute à une liste Realm.:

  1. Oui, sur l’objet Model View j’utilise la fonction de l’interface dont il hérite pour pouvoir y passer ma liste de carte ( qui je le précise est de nature RealmResult):

ViewModel transfert

le contenu de mon ViewModel:
ViewModel content

Comme tu peux le voir, à un moment je fais exprès de récupérer la dernière carte de la liste et de stocker l’information " firstName" dans une variable « _text » pour vérifier dans mon Fragment si celui la reçoit correctement (en la copiant dans la variable « text »).

Or il voit que la valeur est vide puisque le text view que j’ai crée exprès pour l’afficher ne montre rien.

  1. Exact.

PS: petite erreur dans mon précédent post je voulais dire qu’il fallait lire le schéma de la droite vers la gauche.

Tu arrives à voir quelque chose de louche?

Il y a plusieurs choses qui me paraissent louches mais c’est surtout que j’ai du mal à avoir une vision de ton code.
Ce serait plus simple d’utiliser la mise en forme du code normal (il y a un bouton de mise en forme exprès dans le forum) et que tu mettes les 3 classes entières plutôt que des captures d’écran.
J’ai aussi besoin de savoir quel est l’écran affiché en premier.

Voici les points qui me sautent aux yeux mais sans contexte je ne suis pas certain :

  • pourquoi ce finish() est nécessaire.
  • je ne vois pas à quel endroit sur enregistres la surveillances de tes live data pour afficher leur résultat.
  • les live data ne doivent pas forcément être recréées à chaque fois, il faut garder l’objet LiveData et modifier sa value pour que l’UI voit le changement.