1

ListViewを内蔵したホーム画面ウィジェット(Android 4.x-ICS)を使用していますが、変更を加えると、リストされたアイテムが正しく表示されません。つまり、「古い」データが表示されます。その常にこのように:

  1. リストビューの表示部分には、常に良好な(=新しい)データが表示されます
  2. リストの非表示部分(上または下にスクロール)常に古いアイテムの一部を表示します(一部は表示しません)

リストの非表示部分がキャッシュされているように見えます。上下にスクロールすると、更新される項目はごくわずかで、その他は更新されません。そして、それはおかしいように見えます。なぜなら、私が上下にスクロールしているとき、いくつかのアイテムは、完全にランダムのように、古いもの、新しいもの、そして常に異なるアイテムを表示しているからです。それは単純な奇妙な...

どうしたの?これが私の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);
4

2 に答える 2

0

関数を使用する必要があります

notifyDataSetChanged()

リストの作成に使用しているアダプターで呼び出されます。詳細については、このリンク を確認してください。

于 2012-08-15T08:56:07.837 に答える
0

わかりました、完全に私のせいです、それはばかげた間違いでした-私はちょうど1つのフィールドを更新するのを忘れました。

于 2012-08-15T10:00:29.667 に答える