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);
}
});
}
3 Réponses :
Vous pouvez utiliser startActivityForResult au lieu de startActivity
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. :)
OK, je voudrais essayer et vous le faire savoir. merci @Yasu
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)
}
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.
D'accord, voici ce que je ferais:
startActivityForResult de PostActivity pour ouvrir CommentActivity CommentActivity , je mettrais à jour la liste dans le référentiel et terminerais l'activité avec un résultat correct 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 li>
PostActivity et je la mettrais à jour dans Adapter 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;)