0
votes

Mise à jour du nombre de commentaires pour un message dans Recyclerview

L'activité A a une vue recycleur, qui a chaque ligne en tant que message, maintenant chaque message a une vue de texte du nombre de commentaires qui lance une activité de commentaire où l'utilisateur peut voir les commentaires et également ajouter des commentaires.

Maintenant, la question est, après avoir ajouté un commentaire, comment mettre à jour le nombre de commentaires dans cette ligne particulière de la vue recycleur dans l'activité A lorsque l'activité de commentaire se termine ou en appuyant sur le bouton retour pour revenir sur la page des messages. Mais je ne veux pas recharger la vue du recycleur car cela détournerait l'attention de l'utilisateur de l'emplacement actuel.

Veuillez me guider dans la bonne direction. Voici mon extrait de code de l'adaptateur Recyclerview.

public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
        int viewType = getItemViewType(position);
        final Posts posts = postsList.get(position);
        final viewHolderPost viewHolderPost = (viewHolderPost) viewHolder;

        viewHolderPost.commentcount_wrap.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(v.getContext(), CommentViewerActivity.class);
                        intent.putExtra("post_id", posts.getPost_id());
                        v.getContext().startActivity(intent);
                    }
                });
}


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser startActivityForResult au lieu de startActivity

Réf: https://developer.android.com/reference/android/app/Activity#startActivityForResult (android.content.Intent,% 20int,% 20android.os.Bundle)

Ainsi, lorsque CommentActivity est terminé, l'activité précédente recevra un rappel qui est le résultat de CommentActivity , vous gérerez ce résultat et mettrez à jour l'adaptateur de votre recyclerview.

/ p>

J'espère que cela vous aidera. :)


1 commentaires

OK, je voudrais essayer et vous le faire savoir. merci @Yasu



0
votes

Vous pouvez informer l'adaptateur qu'il y a un changement à la position particulière. check: adapter.notifyItemChanged (1)

-edit-

Sur votre activité A, ajoutez ceci.

recycler_test.adapter = CustomAdapter(Controller.shared.myList){ positionClicked ->
        //This block of code will be called every time a user clicked a comment.

        lastPosition = positionClicked

        val intent = Intent(applicationContext, ActivityB::class.java)
        intent.putExtra("position", positionClicked)
        startActivity(intent)
    }

Et votre adaptateur devrait fournir un rappel comme ça.

override fun onResume() {
    super.onResume()
    if(lastPosition != -1)
        recycler_test.adapter?.notifyItemChanged(lastPosition)
}


2 commentaires

D'où dois-je l'appeler? Activité A ou activité de commentaire? Pouvez-vous s'il vous plaît publier un extrait de code?


J'ai ajouté du code. De plus, au lieu de onResume, vous pourriez onActivityResult comme les gars vous l'ont déjà dit.



0
votes

D'accord, voici ce que je ferais:

  1. Créez un objet commun (de préférence un référentiel), où je stockerais la liste des articles avec des commentaires en mémoire.
  2. En cliquant sur Publier, j'appellerais la méthode startActivityForResult de PostActivity pour ouvrir CommentActivity
  3. Après avoir ajouté / supprimé / modifié le commentaire dans CommentActivity , je mettrais à jour la liste dans le référentiel et terminerais l'activité avec un résultat correct
  4. Dans PostActivity , je remplacerais la méthode onActivityResult pour vérifier si le CommentActivity s'est terminé avec un résultat qui me dira d'actualiser la liste dans RecyclerView
  5. Si tel est le cas, j'obtiendrais la liste mise à jour du référentiel dans PostActivity et je la mettrais à jour dans Adapter

12 commentaires

Merci beaucoup pour le guide étape par étape. Je suis actuellement ce processus car @Yasu a également guidé la même chose.


J'ai essayé cela en utilisant ((Activity) context) .startActivityForResult (intent, 301); Mais le problème est que j'obtiens Null comme données de retour dans l'activité d'origine à onActivityResult (). Pouvez-vous me dire pourquoi cela se produit?


Hé, vérifiez cette réponse, cela pourrait vous aider: stackoverflow.com/a/14785924/2448589


Salut Mariusz, j'ai fait exactement la même chose à une différence près. J'appelle la deuxième activité de RecyclerView.Adapter en utilisant ((Activity) context) .startActivityForResult (intent, 301);


Voici l'extrait de code pastebin pastebin.com/arZDYgxH


OK, lorsque vous mettez le post_position et comment_count sont-ils Int ou String? Parce que vous essayez de lire une chaîne dans onActivityResult


Je viens d'utiliser intent.putExtra ("comment_count", result_comment_count); Je n'ai rien précisé


Mais les deux variables sont définies comme des nombres entiers


D'accord, mais putExtra est une méthode surchargée, ce qui signifie qu'il existe de nombreuses méthodes putExtra, qui acceptent différents paramètres. Vous devez donc vous assurer que lorsque vous lisez les données dans onActivityResult, vous essayez d'obtenir le même type que vous avez mis dans putExtra


vous devez donc appeler int commentCount = data.getIntExtra ("comment_count", -1); , où -1 signifie que commentCount n'est pas passé / pas correctement passé de l'activité précédente


OMG!!! Merci Mariusz cela a fonctionné et j'ai eu le résultat.


Génial! :) Si tout va bien, veuillez accepter la réponse;)