该应用程序有一个常规小部件,其中包含三个TextView. 数据从方法中加载SharedPreferences和处理,处理结果输入到TextView. 重启手机后,所有数据都重置为单位,小部件不再可点击。在设置中指定的时间后更新小部件后问题得到解决。此外,在将小部件从一个屏幕移动到另一个屏幕时,在弱手机上也注意到了这个问题。告诉我如何处理这个问题?
小部件类:
public class NewAppWidget extends AppWidgetProvider {
SharedPreferences mSettings;
void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
loadSettings(context); //загрузка данных из SP
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.template_widget);
views.setTextViewText(R.id.appwidget_time_value, getDays(context));
RemoteViews views2 = new RemoteViews(context.getPackageName(), R.layout.template_widget);
views2.setTextViewText(R.id.appwidget_count_value, getCount());
RemoteViews views3 = new RemoteViews(context.getPackageName(), R.layout.template_widget);
views3.setTextViewText(R.id.appwidget_money_value, getMoney());
Intent intent = new Intent(context, MainActivity.class);
PendingIntent pIntentMainActivity = PendingIntent.getActivity(context, 0, intent, 0);
views.setOnClickPendingIntent(R.id.widget, pIntentMainActivity);
appWidgetManager.updateAppWidget(appWidgetId, views);
appWidgetManager.updateAppWidget(appWidgetId, views2);
appWidgetManager.updateAppWidget(appWidgetId, views3);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int appWidgetId : appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId);
}
}
@Override
public void onEnabled(Context context) {
// Enter relevant functionality for when the first widget is created
}
@Override
public void onDisabled(Context context) {
// Enter relevant functionality for when the last widget is disabled
}
提供者
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:initialKeyguardLayout="@layout/template_widget"
android:initialLayout="@layout/template_widget"
android:minHeight="20dp"
android:minWidth="120dp"
android:resizeMode="horizontal"
android:previewImage="@drawable/example_appwidget_preview"
android:updatePeriodMillis="1800000"
android:widgetCategory="home_screen">
</appwidget-provider>
RemoteViews多次接收一个类对象是没有意义的,因为它们是同一个东西。您还需要
onUpdate添加对父方法的调用super.onUpdate(context, appWidgetManager, appWidgetIds);