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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage