リストビューとそのアダプターについて多くの質問がありますが、私はそれを正しく使用していると確信しています。ただし、Android 4.0.3 (ICS、および一部の特定のレイアウトでのみ) で (常に) 適切に更新されないリストビューがあります。
コード:
アクティビティの 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);
別のスレッドから、アダプターに追加、置換、挿入する必要がある新しいデータを受け取ります。簡単に言うと、クリアを使用して総置換の例を使用します。
private void updateList() {
runOnUiThread(new Runnable() {
public void run() {
mArrayAdapter.clear();
for (CustomItem item: mLastReceivedItems) {
mArrayAdapter.add(item);
}
mArrayAdapter.notifyDataSetChanged();
}
});
}
新しいアイテムが受信されると、リストに表示されますが、アイテムなしで更新が受信されると表示されます。アダプターが実際に空である間、ビューはまだアイテムを表示しています。
コードは引き続き Android 2.3.7 で動作し、他のレイアウトを使用しても再現できませんが、問題になる可能性のある多くの違いは見られません。
パフォーマンスをあまり落とさずにこのバグを回避するためのレイアウト パラメータまたはアダプタ関数を見つけた人はいますか?