Ich habe eine RecyclerView, die aus einer ArrayList füllt. Die Ausgabe ist ein CardView-Layout. In der Cardview gibt es 2 Schaltflächen unter anderen Ansichten. Sie müssen nur den aktuellen Wert einer TextView lesen, die standardmäßig 1 ist, und sie erhöhen oder verringern. Die Arraylist enthält 8 Elemente.ReclyclerView und CardView, onclick Methode führen die Aktion auf mehrere CardViews gleichzeitig
Wenn ich die App ausführen, funktioniert die Benutzeroberfläche gut. Problem ist, wenn ich versuche, den Wert der TextView zu ändern. Der Wert wird in der CardView, an der ich gerade arbeite, korrekt erhöht und verringert, aber auch der Wert wird auf einem anderen CardView geändert. Und in diesem zweiten CardView modifiziert der TextView-Wert auch den ersten.
Also, was mache ich falsch?
Das ist mein Fragment:
public class Fragment_rosas extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout_rosas,container,false);
RecyclerView recyclerview_rosas;
RecyclerView.Adapter adaptador_rv_rosas;
RecyclerView.LayoutManager lm_rosas;
List rosas = new ArrayList();
rosas.add(new Tropa(1,R.drawable.minibarbaro, getResources().getString(R.string.barbaro),7,1));
recyclerview_rosas = (RecyclerView) view.findViewById(R.id.recyclerView_tropasRosas);
recyclerview_rosas.setHasFixedSize(true);
lm_rosas = new LinearLayoutManager(getContext());
recyclerview_rosas.setLayoutManager(lm_rosas);
adaptador_rv_rosas = new AdaptadorTropa(rosas);
recyclerview_rosas.setAdapter(adaptador_rv_rosas);
return view;
}
}
Und hier der Teil des Codes auf meinem Adapter:
:@Override
public void onBindViewHolder(final TropaViewHolder viewHolder, int i) {
viewHolder.imagen.setImageResource(items.get(i).getImagen());
viewHolder.nombre.setText(items.get(i).getNombre());
viewHolder.maxnivel.setText(String.valueOf(items.get(i).getNivelMax()));
viewHolder.espacioencamp.setText((String.valueOf(items.get(i).getEspacioEnCamp())));
final String nombre = items.get(i).getNombre();
final int maxnivel = items.get(i).getNivelMax();
viewHolder.nivelmas.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String niveltemp = viewHolder.nivel.getText().toString();
String nivelmaxtemp = viewHolder.maxnivel.getText().toString();
int nivel = Integer.parseInt(niveltemp);
int maxxnivel = Integer.parseInt(nivelmaxtemp);
int nuevonivel = nivel+1 ;
if (nuevonivel<=maxxnivel) {
viewHolder.txtv_nivel.setText(String.valueOf(nuevonivel));
}
}
});
Mein OnCreateViewHolder (nichts wirklich hier passiert)
gibt es 2 Probleme mit dieser Lösung. Zuerst müssen Sie sich den Wert merken, der für jede TextView inkrementiert/dekrementiert wird. Andernfalls sehen Sie immer den Standardwert für TextView, wenn Ansichten wiederverwendet werden. Zweitens sollten Sie Click-Listener in onCreateViewHolder einrichten, um sie effizienter zu machen. Es wäre sehr hilfreich, Ihren onCreateViewHolder zu sehen. – dkarmazi
Mit meinem onCreateViewHolder aktualisiert, wie Sie sehen können, ich nur das Layout dort aufblasen. Soll ich die Zuhörer hier schreiben? –