0

我想在Asynctask完成後刷新ListFragment。在我的Asynctask doInBackground方法中,我連接到數據庫並將元素添加到ArrayList。在onPostExecute方法我想的東西進入我的ListFragment這樣稱呼它是refreshData(方法):如何從Asynctask刷新ListFragment?

//REFRESH ARTISTFRAGMENT 
@Override 
public void onPostExecute(ArrayList<String> result) { 

    ArtistFragment artistFrag = new ArtistFragment(); 
    artistFrag = (ArtistFragment) artistFrag.getSherlockActivity().getSupportFragmentManager().findFragmentById(R.id.frame_container); 
    if (artistFrag != null) { 
     artistFrag.refreshData(result); 
    } 
} 

但getSupportFragmentManager導致空指針異常!在我的片段

的refreshData方法是這樣的:

public void refreshData(ArrayList<String> data) { 
     artists = new ArrayList<String>(data); 
     this.artistAdpater.notifyDataSetChanged(); 
    } 

我發現非常類似的方法做我想要的確切的事情,但我不能找到一個解決我的問題。基本上它在這裏完成https://stackoverflow.com/a/16388650 - 但它不適合我這樣的工作。

有沒有人爲此解決方案或解決方法?

+0

我的一個朋友找到了一個簡單的解決方法。他在AsyncTask中實現了一個構造函數。當實例化並執行AsyncTask移交片段時。 – f4b

回答

0

我假設藝術家是供給您的listview的數組列表。

artists = new ArrayList<String>(data); 

你在做什麼創建了一個新的藝術家ArrayList對象引用。但是列表適配器具有較舊的參考。這就是爲什麼列表沒有得到更新。

不是傳遞新的ArrayList的參考,你可以把它添加到舊的,像這樣:

newArtistsArraylist = new ArrayList<String>(data); 
artists .add(newArtistsArraylist); 

Here is a nice solution to your problem.

+0

謝謝,這可能是問題的一部分,但我甚至沒有得到這麼遠,因爲由'getSupportFragmentManager()'引起的NullPointerException異常' 在您提供的鏈接中,舊適配器被新的覆蓋。但用新值和'notifyDataSetChanged()'刷新它會不會更好? – f4b

+0

現在檢查答案。 – amalBit

+0

好吧,我改變了這一點,但我無法調用函數refreshData(),因爲我無法訪問我的片段的實例來調用它。你有沒有想法如何調用它或如何解決NullPointerExc.-問題? – f4b