Ich benutze RecyclerView.Adapter, um mehrere ViewHolder mit verschiedenen Nachrichten anzuzeigen. Dies ist die onBindViewHolder Funktion:onClickListener Funktionen unter OnBindViewHolder gibt seltsame Ergebnisse
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.messageTextView.setText("Updated message");
}
});
}
Die seltsame Sache, dass passiert ist, dass, wenn ich submitButton am 1. ViewHolder drücken, dann wird die Nachricht auf mich als „Aktualisierte Meldung“ angezeigt, aber wenn ich dann nach unten scrollen zu anderen ViewHolders, Der 5. ViewHolder enthält auch "Aktualisierte Nachricht" und die 9., 13. usw. haben bereits die Nachricht auf ihnen angezeigt. Ähnlich, wenn ich den submitButton auf dem 2. ViewHolder drücke, wird die Nachricht am 2., 6., 10., 14. usw. angezeigt.
Idealerweise sollte es so funktionieren, wenn ich den submitButton auf den 1. ViewHolder drücke, sollte die Nachricht nur auf dem 1. ViewHolder und nicht anderen angezeigt werden.
Ich hatte den Parameter ViewHolder Halter als letzte so zu setzen, dass ich es in der inneren Klasse von onClick Funktion aufrufen können.
Ich habe keine Ahnung, warum dies geschieht, und ich habe noch nie onBindViewHolder Funktionen vor, aber ich fühle es etwas das Argument ViewHolder Inhaber sein „final“ verwandt ist.
Ich habs! So kann ich einfach überprüfen, ob für eine Position die Schaltfläche geklickt wurde, dann wird nur die Nachricht über onCreate dieses ViewHolders angezeigt. Ich wusste nichts von der Wiederverwendung von ViewHolders. Vielen Dank! –