ListView zeigt Änderungen erst an, wenn sich der Fokus nach notifyDataSetChanged @ änder
Ich habe einAlertDialog
mit einerListView
auf Mehrfachauswahl setzen. Es hat auch einButton
drauf.
DasButton
öffne ein anderesAlertDialog
Wenn OK, werden die ausgewählten Elemente aus dem Datensatz des @ entfernListView
, und teilen Sie dem Adapter der Listenansicht mit, dass sich das Dataset mit dem @ geändert hanotifyDataSetChanged()
Methode
Dies alles funktioniert gut, bis auf eine Sache. DasListView
aktualisiert seinen Inhalt erst, wenn ich mit etwas interagiere. Dann werden die korrekten Daten aktualisiert.
Dies ist kein großes Problem, aber ich würde das @ wirklich mögListView
, um sofort korrekt zu erscheinen, und nicht erst, nachdem sich der Fokus geändert hat.
Code
Button remove = (Button) view.findViewById(R.id.btn_remove_questions_edit_rack);
final Context con = this;
remove.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Builder warnBuild = new Builder(con);
warnBuild.setMessage(R.string.question_deletion_warning);
warnBuild.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
SparseBooleanArray checked = list.getCheckedItemPositions();
for (String s : keys)
{
int i = keys.indexOf(s);
if (checked.get(i))
{
toRemove.add(map.get(s));
map.remove(s);
}
}
keys.clear();
keys.addAll(map.keySet());
((ArrayAdapter) list.getAdapter()).notifyDataSetChanged();
list.clearChoices(); //This makes sure the selection is cleared, if it isn't, some of the other items (those that now has the index of the selected items) will be selected when the View refreshes.
dialog.dismiss();
}
});
//Negative button here, not relevant.
}
});
Womap
undkeys
sind
final HashMap<String, QualityQuestion> map = new HashMap<>();
//I add items to the map
final ArrayList<String> keys = new ArrayList<>(map.keySet());
UndtoRemove
ist der Ort, an dem ich die Objekte speichere, die aus dem eigentlichen Objekt entfernt werden sollen, auf dem sie sich befinden, wenn der OK-Button auf dem OriginalAlertDialog
wird gedrückt
So fülle ich meinListView
an erster Stelle
final ListView list = (ListView) view.findViewById(R.id.list_questions_edit_rack);
list.setAdapter(
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_activated_1,
keys));
Ich habe Dinge ausprobiert wielist.invalidateViews()
, list.invalidate
und andere Dinge, die ich in ähnlichen Fragen wie meiner hier auf SO gefunden habe. Aber nichts davon machte einen Unterschied. Ich vermute, dass sich mein Problem von dem ihrer unterscheidet, da meine Artikel eindeutig aktualisiert wurden. Es ist lediglich eine Änderung des Fokus auf das Original erforderlich.AlertDialog
, damit die Änderung sichtbar wird.
Wie kann ich das @ machListView
Zeigen Sie die Änderungen in der Datenquelle an, die unmittelbar nach einer Fokusänderung vorgenommen wurden.