2014-03-31 38 views
0

我有兩個片段,一個用於縱向,一個用於橫向。當應用程序是肖像的時候,ListView填充了服務器上的所有內容,但是當我打開電話環境時,ListView會填充,但不會與服務器上的所有內容(每次都會丟失最後5或6個條目)。我已經調試了代碼,並且可以看到從我的服務器返回的消息中的所有內容。列表視圖不顯示所有條目

我的代碼如下:

public final Handler myCallBack = new Handler() { 
@Override 
public void handleMessage(Message msg) { 
try { 
    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 { 
    dataList = (ArrayList<Beer>) msg.obj; 
    lv.setVisibility(View.VISIBLE); 
    ArrayAdapter<Beer> arrayAdapter = new ArrayAdapter<Beer>(
    getActivity(), android.R.layout.simple_list_item_1, (List<Beer>) msg.obj); 
    lv.setAdapter(arrayAdapter); 
} 
}catch (Exception ex) { 
} 
} 
}; 

任何幫助將非常感激。

回答

2

的問題很可能是你傳遞你的數據到您的處理方式:

提取dataList只是到ArrayList<Beer>仍然可以改變一個參考。

你需要的是通過你的陣列數據的copy消息,爲此,你需要你的Beer工具Parcelable

然後把你的ArrayList<Beer>putParcelableArrayList捆綁,並設置捆綁到郵件發送到您的處理程序的UI線程之前:

Bundle bundle = new Bundle(); 
bundle.putParcelableArrayList("myBeers", dataList/*your ArrayList*/); 
msg.setData(bundle); 

後來隨着提取它在你的處理器

ArrayList<Beer> dataList = bundle.getParcelableArrayList("myBeers"); 

我相信這將解決您的問題。讓我知道你是否需要更多細節。

+0

感謝剛剛卡在我的處理程序中的位的幫助,我將消息作爲消息返回給處理程序,然後我卡住了,因爲我對如何將消息放入一個包中以至於我無法得知使用getParcelableArrayList方法。乾杯 – Stephen

+0

好的。讓我總結一下你需要做的事情。它並不那麼複雜:1.使「啤酒實現Parcelable」。這很簡單,參見'parcelable'鏈接中的例子,或者搜索SO 2上的大量示例。您必須將'putParcelableArrayList'放入'new Bundle()'中,然後將此包綁定到您想要的消息發送。你能做到嗎? – kiruwka

+0

有它,感謝您的幫助 – Stephen

相關問題