ListViewを内蔵したホーム画面ウィジェット(Android 4.x-ICS)を使用していますが、変更を加えると、リストされたアイテムが正しく表示されません。つまり、「古い」データが表示されます。その常にこのように:
- リストビューの表示部分には、常に良好な(=新しい)データが表示されます
- リストの非表示部分(上または下にスクロール)常に古いアイテムの一部を表示します(一部は表示しません)
リストの非表示部分がキャッシュされているように見えます。上下にスクロールすると、更新される項目はごくわずかで、その他は更新されません。そして、それはおかしいように見えます。なぜなら、私が上下にスクロールしているとき、いくつかのアイテムは、完全にランダムのように、古いもの、新しいもの、そして常に異なるアイテムを表示しているからです。それは単純な奇妙な...
どうしたの?これが私のListViewです:
<ListView
android:id="@+id/panelNews"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_marginLeft="@dimen/padding"
android:layout_marginRight="@dimen/padding"
android:layout_weight="1"
android:gravity="top"
android:paddingTop="@dimen/padding"
android:scrollingCache="false"
android:animationCache="false">
</ListView>
そして、これが私のMyWidgetServiceFactoryメソッドのコードです(このメソッドはデータが変更されるたびに起動されます):
public void onDataSetChanged() {
MyLogger.log(TAG, "onDataSetChanged");
listItems = dbHandler.getRecords(prefHandler);
}
これが、UpdateServiceからのデータ変更についてMyWidgetServiceFactoryに通知する方法です。
AppWidgetManager manager = AppWidgetManager.getInstance(this);
int[] appWidgetIds = manager.getAppWidgetIds(new ComponentName(this, MyWidget.class));
manager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.panelNews);