2013-05-01 65 views
0

我使用DialogFragment创建了一个自定义对话框,在对话框中,我可以将一些数据添加到SQLite数据库。此外,主活动中还有一个listview,它显示SQLite的数据。如何在使用DialogFragment更改数据后刷新ListView?

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

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

@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!"); 
} 
+0

是的onResume甚至称,你检查了吗? – Dusan 2013-05-01 15:36:06

+0

当对话框关闭时,onResume不会被调用,但如果我在最近的应用程序列表中选择活动,它将被调用 – rookiepeng 2013-05-01 16:37:15

回答

0

您的对话框片段将与活动绑定。 一个简单的方法是直接从对话框通知你父母的活动,如下所述:

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

在此基础上,我将创建一个InterfaceActivity必须为了得到一个回调实现,当数据库被更新并重新加载列表(或其他):

public interface OnDBUpdatedListener { 
    public void OnDBUpdated(); 
} 

在你的活动()你实现这个接口:

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

在你的对话片段,当你保存数据,或者当你关闭对话框,把下面的代码:

(OnDBUpdatedListener)getActivity()).OnDBUpdated() 
+0

我的对话框是一个自定义对话框扩展DialogFragment,这是行不通的。 – rookiepeng 2013-05-01 16:41:54

+0

对不起,我的错误,我错过了你正在讲述DialogFragment。 – Dusan 2013-05-01 17:25:46

+0

我更新后的答案是否处理您的问题? – Dusan 2013-05-03 08:47:29

相关问题