通过方法调用增加变量值

时间:2019-06-21 17:39:29

标签: java android widget

我正在构建一个简单的小部件以每天显示一个数字。我初始化了一个称为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);
    }
}

您能帮我解决这个问题或提出其他建议吗? :(非常感谢你们。

1 个答案:

答案 0 :(得分:0)

您永远不应期望AppWidgetProvider中的实例变量具有持久性。您的AppWidgetProvider很可能在更新后被销毁,并且在下次需要更新时会重新创建。发生这种情况时,您将获得一个值为1的Counter的新副本。

如果您希望在小部件更新之间记住一个值,则应将该值存储在持久性存储中,例如SharedPreferences。

https://developer.android.com/reference/android/content/SharedPreferences.html