2013-05-01 109 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

相關問題