2014-04-01 34 views
0

好了,香港專業教育學院花費在這兩天,我都在陽光下嘗試一切和谷歌:L更新列表視圖中的一個片段與來自另一個片段的數據

基本上,如果我添加或從我的服務器刪除的東西,我想從我的detailfragment中更新我的列表視圖,該列表視圖位於mylistfragment中,以反映服務器上的更改。這些更改通過點擊我詳細片段中的刪除或添加按鈕而發生。

我有一個回調方法,它具有我需要重新填充listview的所有內容,我只是無法得到listview來更新。

任何幫助將不勝感激。

我的回調代碼如下:

public final Handler myCallBackAll = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     ListView lv = (ListView) view.findViewById(R.id.listView1); 
    if (msg.obj == "No Response") { 
    TextView tv2 = (TextView) view.findViewById(R.id.textView2); 
    tv2.setText("No Response. Please check your internet connection"); 
    tv2.setVisibility(View.VISIBLE); 
    lv.setVisibility(View.INVISIBLE); 
    } else { 
    Beer beers = new Beer(); 
    ArrayAdapter<Beer> arrayAdapter = new ArrayAdapter<Beer>(
    getActivity(), android.R.layout.simple_list_item_1,(List)msg.obj); 
    lv.setAdapter(arrayAdapterNew); 
    arrayAdapter.notifyDataSetChanged(); 
} 
} 
}; 

它不拋出任何錯誤,只是不工作

我的回調是如何調用這裏

if (isBound) { 
myBinder.getAllBeer(myCallBackAll); 
} 

它是一種有限的服務我有使用,項目的規定。所有這些代碼的作品,只是mylistview不會更新

+0

您可以將您擁有的代碼粘貼到回調中,還可以如何執行回調? – FMontano

+0

按要求添加代碼。謝謝 – Stephen

+1

使用'String.equals()'來測試'String'是否相等。 – Luksprog

回答

0

終於想通了,可能不是最好的方法,但它確實有效,我已經在我的主要活動中聲明瞭我的listview作爲一個靜態變量,然後我在這兩個片段中引用這個變量它的工作原理如下:P

1

你說你已經有回調設置,所以我假設回調正在相應地被解僱。如果是這種情況,請確保更新您在適配器中使用的數據源(數組,列表等)以反映您在detailfragment中所做的更改。另外,不要忘記,每次添加,編輯和刪除適配器數據源中的數據時,都必須調用mAdapter.notifyDataSetChanged()來告訴適配器中的數據更改。

編輯

嘗試創建您的處理程序,而不是這樣:)public final Handler myCallBackAll = new Handler(Looper.getMainLooper())

notifyDataSetChanged(必須在主UI線程上執行。當你創建一個新的處理程序時,它將在它自己的線程上執行,所以你需要確保它在UI線程上執行。看看here瞭解更多信息

+0

更新的帖子後發表評論,以包含我的代碼 – Stephen

+0

以上嘗試過,仍然沒有工作,沒有錯誤。我調試了代碼,我可以看到代碼更新了適配器,但適配器只是不更新​​ – Stephen

+0

嘗試添加此'arrayAdapter.clear();'在創建新的適配器之前(使用正確的適配器名稱,我假設它也被稱爲arrayAdapter)。 – FMontano

相關問題