Как обновить 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()