Ich habe eine Listview, die zwei Bildschaltflächen in der Zeile hat. Durch Antippen der Bildschaltfläche wird die Hintergrundfarbe geändert. Wenn ich auf das erste Listenelement tippe, ändert sich der Hintergrund der Bildschaltfläche und die Ansicht wird gespeichert, aber während der Bildlauf unten in der Listenansicht ändert sich auch die Hintergrundfarbe der Bildschaltfläche eines anderen Listenelements. Unten ist das getView von Custom Adapter. Wie kann ich dieses Problem vermeiden?Verwechslung mit getview android imagebuttons
public View getView(final int i, View view, ViewGroup viewGroup) {
ViewHolder holder = new ViewHolder();
holder = null;
//view=null;
if (inflater == null) {
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
if (view == null) {
view = inflater.inflate(R.layout.student_list, null);
holder = new ViewHolder();
holder.presentButton = (ImageButton) view.findViewById(R.id.imageView);
holder.absentButton = (ImageButton) view.findViewById(R.id.imageView2);
holder.presentButton.setBackgroundColor(0);
holder.absentButton.setBackgroundColor(0);
view.setTag(holder);
}
else {
holder = (ViewHolder) view.getTag();
}
final SQLiteStudents db1 = new SQLiteStudents(activity.getApplicationContext());
final TextView tvName = (TextView) view.findViewById(R.id.tv_name);
final TextView tvRoll = (TextView) view.findViewById(R.id.tv_roll);
final studentInfo s = students.get(i);
tvRoll.setText(s.getRoll() + ".");
tvName.setText(s.getName());
final Integer roll = Integer.parseInt(s.getRoll());
//ivpresent.setBackgroundColor(0);
final ViewHolder finalHolder1 = holder;
//final ViewHolder finalHolder = holder;
holder.presentButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
db1.updateUser(roll,"present");
finalHolder1.presentButton.setBackgroundColor(GREEN);
finalHolder1.absentButton.setBackgroundColor(0);
//v1.setTag(v.getTag());
//Log.d("present","Roll No: "+String.valueOf(roll));
finalHolder1.presentButton.setTag(Integer.toString(i));
notifyDataSetChanged();
}
});
holder.absentButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
db1.updateUser(roll,"absent");
finalHolder1.presentButton.setBackgroundColor(0);
finalHolder1.absentButton.setBackgroundColor(RED);
//view=null;
//Log.d("absent","Roll No: "+String.valueOf(roll));
finalHolder1.presentButton.setTag(Integer.toString(i));
notifyDataSetChanged();
}
});
return view;
}
public static class ViewHolder {
public ImageButton presentButton;
public ImageButton absentButton;
}
Hinzufügen von Code in anderen Abschnitt meiner Anwendung abstürzt. Die Standardfarbe ist null für beide Bildtasten. Ich möchte nur die gedrückte Taste und nicht andere Tasten in der Listenansicht hervorheben. Meine listview Reihe besteht aus textview und 2 imagebuttons. Vollen code von customadapter in: [link] (https://pastebin.com/SbTKWKLB) –
Ich bekomme die Idee von Ihrem Code, aber immer noch ungelöst Problem .. Der obige Code zurück error und erwartet: 'final boolean [] presentButton = new boolean [1];' und wenn ich imagebutton bool zum letzten Array deklariere, wird nach dem Klick keine Schaltfläche hervorgehoben .. :( –
Danke, dass du mich unterstützt hast, Ich bekomme immer noch Probleme mit der Anleitung, die Sie zur Verfügung gestellt haben.Ein BildButton auf allen Listeneinträgen wurde aufScroll ausgewählt.Ich habe die Zeilen auf dem [code] geändert (https://pastebin.com/Uupxwt0q) .aber es gibt mir denselben Fehler wie Bisherige. –