Ich weiß nicht, was passiert, ich habe eine Liste von Objekten und je nach Status ist es aktiviert oder nicht (CheckBox
). Ich habe zu viele Möglichkeiten ausprobiert, denn zuerst wollte ich eine ArrayList<myObject>
mit dem Status aktualisiert, aber ich weiß nicht, warum die Objekte duplizieren ... und ich endete bei der Erstellung einer TreeSet
(weiß nicht wenn es der bessere Weg ist, aber zumindest jetzt die Objekte wiederholt sich nicht) ... na ja die Sache ist, dass auf meinem Adapter
ich habe dies:ArrayAdapter ändert den Wert der CheckBox
final Sessio sessio = getItem(position);
ALAdapter.add(sessio);
vh.tvSessioName.setText(sessio.getName());
vh.cbAssist.setChecked(sessio.isState());
vh.cbAssist.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Toast.makeText(mContext, "chaning", Toast.LENGTH_SHORT).show();
sessio.setState(isChecked);
}
});
AlAdapter ist private TreeSet<Sessio> ALAdapter;
dies funktioniert gut, Das Problem ist zu der Zeit, die ich den Dialog wieder öffne, weil ich die TreeSet
auf einem json
mit Gson
wie folgt speichern:
Gson gson = new Gson();
String json = mPrefs.getString("ArrayListSesio", "");
Type type = new TypeToken <TreeSet<Sessio>>() {}.getType();
ArrayList<Sessio> obj = gson.fromJson(json,type);
return obj == null ? AlSessio : obj;
Dies funktioniert auch gut ... Ich denke, das Problem auf den Adapter
ist, weil, wenn ich einige der CheckBox
und ich ändere den Zustand der Sessio
uncked, wenn ich die Dialog
wieder öffnen zeigt die Toast
wie 15 Mal ... und jedes Mal, wenn ich den Zustand der CheckBox
Änderungen nach oben/unten scrollen ....
Was mache ich falsch? Gibt es einen anderen Weg, anstatt es zu speichern TreeSet
speichern Sie es zu einem ArrayList
?
Verwenden Sie Listview? –
@ VishweshJainkuniya Yep – Stuart2041
Verwenden Sie Recycler-Ansicht als Kontrollkästchen in der Listenansicht nach dem Zufallsprinzip überprüft und deaktivieren. –