0

我想在我的活動中顯示一個列表片段。列表片段適配器是一個使用典型ViewHolder模式的自定義適配器(從BaseAdapter擴展而來)。它被正確執行。ListFragment和asynctask問題android

我有適配器設置與greenrobot Eventbus從一個asynctask接收一個新的列表對象在後臺查詢(因爲不減慢UI主線程)。

問題是列表片段最初沒有數據庫查詢的結果,所以它默認爲空(並顯示我的XML文本視圖爲主要活動,其ID爲'空')。

最後,我的適配器和listviewfragment根本沒有得到實例化,因爲它默認爲空。

有沒有更好的方法來做到這一點? 如何讓我的listview片段等待從asyncTask收到的數據?

我打算只做一個帶有listview的片段,而不是listview片段,我會看看這是否會有所幫助。

回答

0

由於我的理解正確,所以你做了一切正常。你需要做的是向你的適配器添加一個「更新」方法,每當你的asynctask完成它的工作併爲你獲得結果時就調用它。 此更新方法應該是這個樣子

public void updateAdapterData(List<String> newList) { 
    mItems.clear(); // say mItems is the global list you have in the adpater 
    mItems.addAll(newList); 

    notifyDataSetChanged(); // This will cause the adpater to re-draw it's rows, so now data should be visible in your list 
} 

而在你的片段你服用點,如:

adpater.updateAdapterData(newList); 

這是否幫助?

+0

謝謝邁克。我已經有了它,它從異步任務獲取onEvent方法,並將列表加載到適配器中。問題是片段本身沒有被創建,或者適配器。由於數據最初是空的,因此當沒有數據時,ListFragment的默認行爲是顯示id爲空的視圖資源。 – AnnonAshera 2014-10-17 19:33:24

+0

我真的不明白它是如何做到這一點的,因爲它並不是在第一個地方創建的(我的日誌不會在onattach或oncreateview中實例化,所以我可以告訴)。我正在研究ListFragment源,試圖找出它。 – AnnonAshera 2014-10-17 19:35:09

+0

如果您仍然卡住,請提供一些代碼,以便我可以幫助您! – Mike 2014-10-17 19:35:20