У меня есть виджет домашнего экрана с 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);
}
И вот как я уведомляю MyWidgetServiceFactory об изменении данных из моего UpdateService:
AppWidgetManager manager = AppWidgetManager.getInstance(this);
int[] appWidgetIds = manager.getAppWidgetIds(new ComponentName(this, MyWidget.class));
manager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.panelNews);