gpt4 book ai didi

java - 使用多个 onclicklistener 添加到 SharedPreference 值

转载 作者:行者123 更新时间:2023-12-01 13:57:49 25 4
gpt4 key购买 nike

我在代码中实现了多个点击监听器。但是,我希望将单独图像的每次点击保存在共享首选项的“代码”中。因此,如果图像 1 上有 2 次点击,图像 2 上有 4 次点击,图像 3 上有 6 次点击,则共享首选项中总计最多有 12 次“点击”。问题是,每个 onClickListener 似乎都会覆盖另一个,而不是堆叠。关于如何实现这一目标有什么想法吗?

Image1.setOnClickListener(new View.OnClickListener() { 
SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
int numClicks = pref.getInt("Total_Clicks", 0);

@Override
public void onClick (View v) {
numClicks++;
}

SharedPreferences pref =
getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
Editor ed = pref.edit();
ed.putInt("Total_Clicks", numClicks);
ed.apply();
}
});

Image2.setOnClickListener(new View.OnClickListener() {
SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
int numClicks = pref.getInt("Total_Clicks", 0);

@Override
public void onClick (View w) {
numClicks++;
}

SharedPreferences pref =
getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
Editor ed = pref.edit();
ed.putInt("Total_Clicks", numClicks);
ed.apply();
}
});

Image3.setOnClickListener(new View.OnClickListener() {
SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
int numClicks = pref.getInt("Total_Clicks", 0);

@Override
public void onClick (View x) {
numClicks++;
}

SharedPreferences pref =
getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
Editor ed = pref.edit();
ed.putInt("Total_Clicks", numClicks);
ed.apply();
}
});

最佳答案

您将跟踪 numclicks 3 次(在每个 OnClickListener 内),因此它们相互覆盖是有意义的。

对于初学者,您只能创建一次 OnClickListener,并将其分配给每个图像。这应该可以解决这个问题:

View.OnClickListener imageClickedListener = new View.OnClickListener() {
SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
int numClicks = pref.getInt("Total_Clicks", 0);

@Override
public void onClick (View v) {
numClicks++;

Editor ed = pref.edit();
ed.putInt("Total_Clicks", numClicks);
ed.apply();
}


}

Image1.setOnClickListener(imageClickedListener);
Image2.setOnClickListener(imageClickedListener);
Image3.setOnClickListener(imageClickedListener);

编辑:

我在这里添加了对您评论的回复,因为我发现它更清楚。

sharedPreferences 实例不是问题。它们都与相同的保存数据(“ActivityPREF”)通信。问题是您有 3 个 OnClickListener 实例,并且所有 3 个实例都持有整数 numClicks。所以他们都是从0(或者之前保存的数量)开始,并且只增加了本地的numClicks。因此,如果我点击 image1 两次,该监听器内的 numClicks 将为 2。而其他监听器仍为 0。

如果在增加 numClicks 之前将以下内容添加到 onClick 方法中,就会起作用:

numClicks = pref.getInt("Total_Clicks", 0);

因为它会从保存的值重新加载它。每次单击时仅调用 onClick 方法内的代码,而不是实例化 OnClickListener 时添加的代码。

关于java - 使用多个 onclicklistener 添加到 SharedPreference 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19530196/

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