我正在构建一个简单的小部件以每天显示一个数字。我初始化了一个称为Counter的类及其getter和setter,并使用它们来增加值。但是,每次调用onUpdate()
方法时(30分钟,小部件都会更新),变量将重置为1。
public class WidgetProvider extends AppWidgetProvider {
Counter counter = new Counter();
//Create class counter in order to store global variable
//Constructor makes the counter value = 1
int k;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int appWidgetId : appWidgetIds) {
k=counter.getI();
// k now equals to 1
Toast.makeText(context, "Widget has been updated! ", Toast.LENGTH_SHORT).show();
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
views.setCharSequence(R.id.button, "setText",""+k); //1
counter.increase(counter.getI());
//Log shows counter value = 2
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
您能帮我解决这个问题或提出其他建议吗? :(非常感谢你们。
答案 0 :(得分:0)
您永远不应期望AppWidgetProvider中的实例变量具有持久性。您的AppWidgetProvider很可能在更新后被销毁,并且在下次需要更新时会重新创建。发生这种情况时,您将获得一个值为1的Counter的新副本。
如果您希望在小部件更新之间记住一个值,则应将该值存储在持久性存储中,例如SharedPreferences。
https://developer.android.com/reference/android/content/SharedPreferences.html