2011-04-07 67 views
0

嗨我有一個應用程序,它在登錄後加載一個主要活動,其中包含一個帶有3個包含列表視圖的選項卡的tabhost。每個選項卡都通過sqlite +自定義適配器進行填充。數據庫最初通過xml數據填充(sync_d異步到sqlite數據庫)。刷新從父活動選項卡列表視圖

我的問題:我想允許手動同步sqlite數據庫與XML數據,然後更新當前選項卡列表視圖。我有異步線程正常工作,以執行數據庫的後臺更新。我無法弄清楚的是如何強制刷新當前選項卡的列表視圖。問題是我不知道如何從父活動訪問tabhost內的子活動。我很確定notifyDataSetChanged()是我需要的,但我不知道如何訪問選項卡的活動>適配器來做到這一點。我如何訪問一個子活動適配器以調用notifyDataSetChanged()?父(含)活動具有將用於刷新tabhost的列表視圖的按鈕。

替代:我可以嘗試從我的後臺線程的onPostExecute()回調廣播一個意圖。即,當它完成更新數據庫與XML數據我有我的標籤接收廣播並觸發它通過notifyDataSetChanged()刷新...但這可能不是如何廣播/接收意圖的設計是這樣嗎?即在活動和包含選項卡的列表視圖活動之間進行通信?

這是我在堆棧溢出中的第二篇文章,希望我的解釋清楚。感謝任何幫助或建議,您可以提供

EDIT(16-JAN-2012): 是一個很長一段時間,因爲我曾在這個問題上。我原本使用廣播意圖並將其用於兒童活動的解決方案。但我從其他許多人那裏得到了建議(你也應該這樣做)!而是停止使用標籤內的活動。我現在在選項卡中使用視圖。這工作更好,更清潔。

除了代碼變得過於繁瑣之外,當在活動之間進行旋轉時,我也會變得奇怪的「數據庫未關閉」類型錯誤。在選項卡中的視圖而不是活動修復了許多問題,我相信它在資源使用上更好。

+0

但你是如何刷新標籤視圖內的列表視圖? – Shrikant 2012-11-05 10:10:36

回答

2

我剛剛完成實施 「一」 的解決方案。我基本上使用了上面提到的廣播意圖。

Incase其他人想要這樣做,在我的AsyncTask任務的onPostExecute()方法中(我的XML與數據庫進行後臺同步)。我提出用意圖廣播:

@Override 
    protected void onPostExecute(Integer result) { 
     Intent i = new Intent("com.myapp.app.DATA_REFRESH"); 
     sendBroadcast(i); 

    }  

然後tabhost內>標籤活性我接收廣播的意圖與:

public class updaterBroadcastReceiver extends BroadcastReceiver {  
     @Override 
     public void onReceive(Context context, Intent intent) { 
      fillData(); // rebuild my listview with new database data 
     } 
} 

註冊/設定上述意圖接收機:

@Override 
public void onResume(){   
     IntentFilter filter = new IntentFilter("com.myapp.app.DATA_REFRESH"); 
     updaterBroadcastReceiver r = new updaterBroadcastReceiver(); 
     registerReceiver(r,filter); 

     super.onResume(); 
} 

FillData()用於使用數據庫中的新數據更新列表視圖。

好吧,這似乎對我有用,如果任何人有更好的方法來做到這一點的建議,請讓我知道。我對android非常陌生。

乾杯, 羅布

1

看一看this線程。

我有一個類似的問題,我想刷新TabHost的事件選項卡。我定義了一個接口,其中的所有Sub(Tab)活動都實現了,並從TabHost調用了Sub(Tab)Activity的消息(查看發佈的onTouch()方法)。

+0

謝謝KClaszen,這看起來不錯,你如何獲得子選項卡活動的上下文。我可以嘗試改變我這樣做(即'查看currentView = getTabHost()。getCurrentView();上下文currentViewContext = currentView.getContext();'你認爲使用意向廣播/接收像我這樣的執行?我會標記你,但沒有足夠的聲譽:) – wired00 2011-04-07 21:46:31

+0

@ wired00不幸的是,我還沒有使用意向廣播,但不能評論這個解決方案。 – FrVaBe 2011-04-08 09:48:12