2012-09-05 101 views
2

關於列表視圖及其適配器有許多問題,但我很確定我正確使用它。不過,我現在有一個列表視圖不會(總是)在Android 4.0.3上正確更新(ICS,並且僅在某些特定佈局中)。Android 4.0.3 ICS ArrayAdapter notifyDataSetChanged不更新ListView

代碼:

在活動的OnCreate:

mListView = (ListView) findViewById(R.id.list); 
mArrayAdapter = new CustomListAdapter(this, R.layout.row_layout); 
// We update it manually, but leaving this default doesn't work either 
mArrayAdapter.setNotifyOnChange(false); 
mListView.setAdapter(mArrayAdapter); 

從單獨的線程我收到,我有追加,替換,插入適配器的新數據。對於simplicitly我現在用的總使用明確的替代例如:

private void updateList() { 
    runOnUiThread(new Runnable() { 
    public void run() { 
     mArrayAdapter.clear(); 
     for (CustomItem item: mLastReceivedItems) { 
     mArrayAdapter.add(item); 
     } 
     mArrayAdapter.notifyDataSetChanged(); 
    } 
    }); 
} 

當收到新的項目它們顯示在列表中,但如果沒有任何物品接收到更新。該視圖仍顯示適配器真空時的項目。

該代碼仍然適用於Android 2.3.7,我也無法在使用其他佈局時重現該代碼,但我無法看到可能存在的許多差異。

有沒有人找到任何佈局參數或適配器函數來解決此錯誤而不會損失太多性能?

private void updateList() { 
    runOnUiThread(new Runnable() { 
    public void run() { 
     mArrayAdapter.clear(); 
     for (CustomItem item: mLastReceivedItems) { 
     mArrayAdapter.add(item); 
     } 
     mArrayAdapter.notifyDataSetChanged(); 
     // FIXME: Temp fix for ICS: 
     mListView.setAdapter(mListView.getAdapter()); 
    } 
    }); 
} 

我:

+0

responseRequester的類型和功能是什麼? –

+0

只是任何類型的項目。這與適配器和列表視圖中使用哪種類型無關 – Huupke

+0

我沒有問你是否相關。我在問什麼是它的類型和功能?它只是一個數據容器嗎?顯示其代碼 –

回答

1

我已經通過每次設置相同的適配器上的列表視圖我更新的數據,以便列表視圖會刪除其「SMART」視圖重新使用所有找到了解決方法,因爲臨時的解決辦法希望有人知道問題出在哪裏,因爲這樣我們就不再使用ListView.mRecycler了,所以我們在這裏失去了性能。

+0

當我嘗試以編程方式更改listview的字體大小時遇到​​此錯誤。列表視圖行沒有在API 15(4.0.3)中調整大小,但在所有其他版本中都行。你的解決方案解決了! – lenooh

相關問題