我在代码中实现了多个点击侦听器。但是,我希望从单独的图像中的每次单击都保存在共享首选项中的“自动收报机”中。因此,如果图像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();
}
});
答案 0 :(得分:1)
您正在跟踪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时添加的代码。