2017-05-30 53 views
0

我使用ListView來顯示我的項目。當項目改變我更新適配器列表,並調用notifyDataSetChanged()Android ListView無法正常刷新

MyAdapter adapter = (MyAdapter) myListView.getAdapter(); 
if(adapter == null) { 
    adapter = new MyAdapter(this, itemList); 
    myListView.setAdapter(adapter); 
} 
adapter.notifyDataSetChanged(); 

這似乎在某種程度上工作,因爲我的ListView顯示更多的項目,但在列表中的新項目沒有得到正確顯示。

這些項目不顯示任何信息。看起來適配器沒有刷新這些新項目。

適配器看起來像這樣(簡化):

public View getView(int position, View convertView, ViewGroup parent) { 
    Point point = getItem(position); 
    if (convertView == null) 
     convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_point, parent, false); 

    TextView firstLine = (TextView) convertView.findViewById(R.id.firstLine); 
    firstLine.setText(point.getNumber()); 
} 

enter image description here

+0

請檢查控制檯。數據是否正確檢索或不。如果它是正確的,並檢查項目的大小。 – sivaprakash

+0

數據沒有問題。 –

+0

也許數據不會傳遞給數組列表。你嘗試過adapter.notifyItemInserted(arraylistsize) – sivaprakash

回答

0

取消你的ListView

adapter.notifyDataSetChanged(); 
listView.invalidate(); 
+0

不,沒有工作。無論是'invalidate()'還是'invalidateViews()' –

+0

都不可以發佈源代碼 – sasikumar

0

我猜的數據不被傳遞,當你試圖向適配器通知數據集已更改。你可以在你將數據添加到你的數據列表的地方發佈整個班級代碼嗎? 另一件事是嘗試在適配器中使用「ViewHolder」類來獲取視圖。

0

我發現了這個問題。

更新後的項目在Adapter.getView()函數的早期導致異常,原因是缺少其他數據。因此,該函數的其餘部分沒有被調用並將內容留空。

解決方案是不僅更新適配器的列表,而且更新適配器所需的所有附加數據。

+0

一切順利:P – lelloman