Как обновить ListView после изменения данных с DialogFragment?

Я создаю пользовательский диалог с DialogFragment, и в этом диалоге я могу добавить некоторые данные в базу данных SQLite. Кроме того, в основной активности есть просмотр списка, в котором отображаются данные SQLite.

Я хочу обновить представление списка, когда я добавляю данные в базу данных из диалогового окна. Однако у меня есть некоторые проблемы.

Я вызываю notifyDataSetChanged() в onResume(), но список не обновляется, когда я закрываю диалог. И если я нажму кнопку "Домой" и открою занятие из недавнего списка, просмотр списка обновится.

@Override
protected void onResume() {
    super.onResume();
    listItem.clear();
    ServerListDB db = new ServerListDB(context);
    Cursor cursor = db.select();
    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("serverName", String.valueOf(cursor.getString(1)));
        map.put("serverIp", cursor.getString(2));
        map.put("serverPort", cursor.getString(3));
        listItem.add(map);
    }
    notifyDataSetChanged();
}

Я добавляю log.v в onPause(), и когда появляется диалоговое окно, onPause () не вызывается. Правильно ли это для DialogFragment?

@Override
protected void onPause() {
    super.onPause();
    Log.v("Pause", "onPause() called!");
}

1 ответ

Решение

Ваш фрагмент диалога будет привязан к активности. Один простой подход - уведомить родительскую активность непосредственно из диалога, как описано здесь:

http://developer.android.com/guide/components/fragments.html

Исходя из этого, я бы создал Interface тот Activity необходимо реализовать для того, чтобы получить обратный вызов при обновлении базы данных и перезагрузить список (или любой другой):

public interface OnDBUpdatedListener {
    public void OnDBUpdated();
}

В вашей деятельности (ях) вы реализуете этот интерфейс:

public void OnDBUpdated() {
    // Reload list here
}

Во фрагменте диалогового окна, когда вы сохраняете данные или закрываете диалоговое окно, вставьте следующий код:

(OnDBUpdatedListener)getActivity()).OnDBUpdated()
Другие вопросы по тегам