gpt4 book ai didi

java - AppWidgetProvider : having trouble with variables

转载 作者:太空狗 更新时间:2023-10-29 15:22:22 25 4
gpt4 key购买 nike

我已经为主屏幕构建了一个小部件,并在我的 AppWidgetProvider 类中声明了一些变量。这些变量是整数和 boolean 值。

我遇到的问题(它基本上是一个 Java 编程问题)是我分配给变量的任何值;当我从主屏幕上删除小部件,然后稍后将小部件添加回主屏幕时,变量仍然保留小部件上次在主屏幕上时的值。我声明变量如下:

public class MyWidget extends AppWidgetProvider {
static int iPicNum = 0;
static Boolean bClosed = false;
...

每次从屏幕上删除小部件并将其重新放回屏幕时,如何重置我的变量值。或者,如果用户希望在屏幕上显示多个小部件实例,则变量不应在它们之间共享值。它们应该相互独立。

谢谢法拉兹·阿兹哈

最佳答案

如果我没有正确理解这个问题,您需要为每个小部件实例提供此值的唯一实例。

对于此类行为,您需要将数据存储在静态对象中,除以 appWidgetId。对于我来说,最好的方法是使用自定义对象的静态 HashMap,如下所示:

private static class MyValues{
private final int iPicNum = 0;
private final boolean bClosed = false;

public MyValues(int iPicNum, boolean bClosed) {
this.iPicNum = iPicNum;
this.bClosed = bClosed;
}
public int getiPicNum() {
return iPicNum;
}
public boolean isbClosed() {
return bClosed;
}
}

在您的 AppWidgetProvider 类中:

private static HashMap<int,MyValues> mValues = new HashMap<int,MyValues>;

当您第一次需要为小部件保存一些数据时:

mValues.put(appWidetId, new MyValues(iPicNum,bClosed);

获取数据:

MyValues values = mValues.get(appWidgetId);
if (values != null){
int iPicNum = values.getiPicNum();
boolean bClosed = values.isbClosed();
}

并且不要忘记在 onDeleted() 方法中清除未使用的数据(它调用,当从屏幕上删除单个实例的小部件时):

public void onDeleted(Context context, int[] appWidgetIds) {
for (int appWidgetId : appWidgetIds) {
if (appWidgetId != -1) {
mValues.remove(appWidgetId);
}
}
}

希望这对您有所帮助。

关于java - AppWidgetProvider : having trouble with variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6353422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com