O ListView não mostra alterações até que o foco seja alterado após notifyDataSetChanged

eu tenho umAlertDialog com umListView defina para seleção múltipla. Também tem umButton nele.

oButton abra outroAlertDialog que, se estiver OK, removerá os itens selecionados do conjunto de dados doListViewe informe ao adaptador da exibição em lista que o conjunto de dados foi alterado com onotifyDataSetChanged() método.

Tudo isso funciona bem, exceto por uma coisa. oListView não atualiza seu conteúdo até que eu interaja com algo. Em seguida, ele atualiza para os dados corretos.

Este não é um grande problema, mas eu realmente gostaria que oListView parecer correto de uma só vez, e não apenas depois que o foco for alterado.

Código:

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

Ondemap ekeys estão:

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

EtoRemove é onde eu guardo os itens a serem removidos do objeto em que estão quando o botão ok no originalAlertDialog está pressionado.

É assim que eu preencho meuListView em primeiro lugar:

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

Eu tentei coisas comolist.invalidateViews(), list.invalidate e outras coisas que encontrei em perguntas semelhantes às minhas aqui no SO. Mas nada disso fez diferença. Suspeito que meu problema seja diferente do deles, pois meus itens são atualizados com clareza, basta uma mudança de foco no originalAlertDialog para que a alteração seja visível.

Como posso fazer oListView mostrar as alterações em sua fonte de dados imediatamente após uma mudança de foco?

questionAnswers(2)

yourAnswerToTheQuestion