This is the project Próbuję uruchomić. Oto mój kod na onBindViewHolder z klasy RecyclerView.AdapterZestaw RecyclerView ambiguosWiadomość, kliknięcie jednego widoku wpływa na wiele widoków
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
TextView title = (TextView) holder.view.findViewById(R.id.title);
final TextView desc = (TextView) holder.view.findViewById(R.id.desc);
final ImageView imageView = (ImageView) holder.view.findViewById(R.id.imageView);
title.setText(pojos.get(position).getTitle());
desc.setText(pojos.get(position).getDesc());
imageView.setImageResource(pojos.get(position).getImage());
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
desc.setText("clicked");
desc.setBackgroundColor(Color.BLUE);
imageView.setImageResource(R.drawable.heart_red);
}
});
}
Lista mnóstwo drobnych, problem się dzieje, gdy onclicklistener w ImageView nazywa.
desc.setText("clicked");
Powyższy wiersz powoduje zmianę pozycji na liście, na którą została kliknięta. ale gdy ta linia zostanie wykonana, zmiana odzwierciedli się w wielu elementach na liście. Co idzie źle? Na poniższych obrazkach kliknąłem element 0, tekst zmienia się na "kliknięty", a kolor jest ustawiony. Ale kiedy przewijam w dół, pozycja 12 również została dotknięta przez kliknięcie na pozycji 0. Zmieniła się tylko zmiana koloru tła, a nie zmiana tekstu. Jak mogę to zatrzymać?
I starali się rozwiązać ten problem przez długi czas, uprzejmie pobrać projekt i spróbować wykonywanie kodu zrozumieć, co dokładnie mam na myśli, jeśli moje pytanie nie jest oczywista.
Rozumiem swoje rozwiązanie. Ale dlaczego setText i setBackgroundColor działają inaczej? dlaczego setText działa tak, jak chcemy wyjść z pudełka? – 55597
Nie działa dinamicznie, sry :) – delive
Amen to! Dzięki za świetne wyjaśnienie :) – Cbr