ListView не показывает изменения, пока фокус не изменится после notifyDataSetChanged

у меня естьAlertDialog сListView установить множественный выбор на нем. Он также имеетButton в теме.

Button открыть другойAlertDialog что если ok'ed удалит выбранные элементы из набора данныхListViewи затем сообщите адаптеру представления списка, что набор данных изменился сnotifyDataSetChanged() метод.

Это все прекрасно работает, за исключением одной вещи.ListView не обновляет его содержимое, пока я не взаимодействую с чем-либо. Затем он обновляется до правильных данных.

Это не большая проблема, но мне бы очень хотелосьListView выглядеть правильно сразу, а не только после изменения фокуса.

Код:

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.
        }
    });

кудаmap а такжеkeys являются:

final HashMap<String, QualityQuestion> map = new HashMap<>();
//I add items to the map
final ArrayList<String> keys = new ArrayList<>(map.keySet());

А такжеtoRemove где я храню элементы, которые будут удалены из фактического объекта, на котором они находятся, когда кнопка ОК на оригиналеAlertDialog нажата.

Вот как я заполняю свойListView на первом месте:

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));

Я пробовал такие вещи, какlist.invalidateViews(), list.invalidate и другие вещи, которые я нашел в вопросах, похожих на мои здесь, на SO. Но ничего из этого не имело никакого значения. Я подозреваю, что моя проблема отличается от их, так как мои вещи явно обновлены, просто нужно изменить фокус на оригиналAlertDialog чтобы изменения были видны.

Как я могу сделатьListView показать изменения в источнике данных, сразу после изменения фокуса?

Ответы на вопрос(2)

Ваш ответ на вопрос