0

我使用 DialogFragment 创建了一个自定义对话框,在该对话框中,我可以将一些数据添加到 SQLite 数据库中。此外,主活动中有一个列表视图,显示 SQLite 的数据。

当我从对话框将数据添加到数据库时,我想刷新列表视图。但是,我有一些问题。

我在 onResume() 中调用 notifyDataSetChanged(),但是当我关闭对话框时列表视图不会刷新。如果我按下主页按钮并从最近的列表中打开活动,列表视图将刷新。

@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();
}

我在 onPause() 中添加 log.v,当对话框显示时,不会调用 onPause()。这适合 DialogFragment 吗?

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

1 回答 1

0

您的对话片段将与活动相关联。一种简单的方法是直接从对话框通知您的父活动,如下所述:

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

基于此,我将创建一个Interface必须Activity实现的函数,以便在更新数据库时获取回调并重新加载列表(或其他):

public interface OnDBUpdatedListener {
    public void OnDBUpdated();
}

在您的活动中,您实现此接口:

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

在您的对话框片段中,当您保存数据或关闭对话框时,输入以下代码:

(OnDBUpdatedListener)getActivity()).OnDBUpdated()
于 2013-05-01T15:40:54.050 回答