我不确定我是否遗漏了一些明显的东西,或者这是否实际上是我不知道该怎么做,但我希望能够重置一些变量(integers
)。我有一个增加它们的方法,它们保存在SharedPreferences
中。我希望能够通过点击按钮将这些重置为0。
我可以使用clear()清除SharedPreferences
;命令,但是int会保持不变,所以一旦再次调用它们,它们就会恢复到重置之前的状态。我也尝试将它们设置为等于0,但是我不能再增加它们了。有没有办法只重置或删除变量?
或者,如果这不可能/太困难,还有另一种方法可以完全重置这些整数吗?
由于
这是递增代码的一部分。这有效。我也可以清除SharedPreferences
;那部分也很好。 唯一不起作用的部分是将int重置为0,但保持可递增。
Button PlusOneButton = ((Button)findViewById(R.id.plusonebutton));
PlusOneButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
intName++;
}});
编辑:最终的代码
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class ThirdScreenActivity extends Activity {
public int myIntPlusOne;
public static final String PREFS = "MyPrefsFile";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.screen2);
SharedPreferences sharedPrefs = getApplicationContext().getSharedPreferences("PREFS", 0);
myIntPlusOne = sharedPrefs.getInt("myIntPlusOneSaved", 0);
if ("ListView Item 1".equals(position)) {
myIntPlusOne = sharedPrefs.getInt("myIntPlusOneSaved", 0);
TextView PlusOne = ((TextView)findViewById(R.id.plusonetextview));
PlusOne.setText(String.valueOf(myIntPlusOne));
Button PlusOneButton = ((Button)findViewById(R.id.plusonebutton));
PlusOneButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
myIntPlusOne++;
TextView PlusOne = ((TextView)findViewById(R.id.plusonetextview));
PlusOne.setText((myIntPlusOne)+"");
SharedPreferences sharedPrefs = getApplicationContext().getSharedPreferences("PREFS", 0);
Editor editor = sharedPrefs.edit();
editor.putInt("myIntPlusOneSaved", myIntPlusOne);
editor.commit();
}
});
}
else if...
}
Button btnClear = (Button) findViewById(R.id.clearbtn);
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myIntPlusOne=0;
TextView PlusOne = ((TextView)findViewById(R.id.plusonetextview));
PlusOne.setText("0");
}
});
}
public void onPause() {
super.onPause();
SharedPreferences sharedPrefs = getApplicationContext().getSharedPreferences("PREFS", 0);
Editor editor = sharedPrefs.edit();
editor.putInt("myIntPlusOneSaved", myIntPlusOne);
editor.commit();
}
}
答案 0 :(得分:2)
试试这个
SharedPreferences sharedPrefs = getApplicationContext().getSharedPreferences("Prefs", 0);
Editor editor = prefs.edit();
Button PlusOneButton = ((Button)findViewById(R.id.plusonebutton));
PlusOneButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(!sharedPrefs.contains("myIntPlusOneSaved")) {
editor.putInt("myIntPlusOneSaved", 0);
editor.commit();
}
intName++;
PlusOne.setText(String.valueOf(intName));
}
}
Button ResetButton = ((Button)findViewById(R.id.resetbutton));
ResetButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(!sharedPrefs.contains("myIntPlusOneSaved")) {
editor.remove("myIntPlusOneSaved");
editor.putInt("myIntPlusOneSaved", 0);
editor.commit();
intName = sharedPrefs.getInt("myIntPlusOneSaved", 0);
PlusOne.setText(String.valueOf(intName));
}
}
}
尝试一下,说它是否有效。
我假设您已尝试过以下解决方案,但它无效:
Button PlusOneButton = ((Button)findViewById(R.id.plusonebutton));
PlusOneButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
intName++;
PlusOne.setText(String.valueOf(intName));
}
}
Button ResetButton = ((Button)findViewById(R.id.resetbutton));
ResetButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
intName = 0;
PlusOne.setText(String.valueOf(intName));
}
}
更改变量/构造函数/ etc的名称。以适应您的代码。
答案 1 :(得分:2)
从我所看到的是,你有点击监听器的两种方法
第一个是您最初发布的增量方法:
Button PlusOneButton = ((Button)findViewById(R.id.plusonebutton));
PlusOneButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
intName++;
}});
第二个使用method2
内声明的method
:
public void method(View view) {
Button PlusOneButton = ((Button)findViewById(R.id.plusonebutton));
PlusOneButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
method2();
}
});
}
我没有看到您实际调用method
的代码,但是一旦执行,您就会覆盖按钮内触发的onClickEvent
,因为第一个setOnClickListener
将从不再次被召唤。我认为这种情况正在发生,因为我引用:
我也试过设置它们等于0,但后来我不能增加 他们了。有没有办法只重置或删除变量?
正如您在方法2中所看到的那样:
public void method2() {
SharedPreferences sharedPrefs = this.getSharedPreferences(PREFS, MODE_PRIVATE);
Editor editor = sharedPrefs.edit();
editor.clear();
editor.commit();
myIntPlusOne = 0;
}
你再也不会再增加myIntPlusOne
,就像你说清除之后一样,它永远不会再增加。
你真的应该使用2个单独的按钮(一个用于增加,一个用于清除),并为每个按钮使用2个单独的onClickListeners
。您可以看到@ FalconC的例子
希望这是有道理的:)
答案 2 :(得分:0)
当您单击ResetButton时,我认为您有一些死代码。您可以在首选项中检查myIntPlusOneSaved
不是,然后尝试将其删除。就个人而言,我会删除这个条件:
ResetButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences sharedPrefs = getApplicationContext().getSharedPreferences("PREFS", 0);
Editor editor = sharedPrefs.edit();
editor.putInt("myIntPlusOneSaved", 0).commit();
myIntPlusOne = 0;
TextView PlusOne = ((TextView)findViewById(R.id.plusonetextview));
PlusOne.setText(String.valueOf(myIntPlusOne));
}
});
对于ClassCastException,我认为您过去在首选项中放置了一个字符串,现在您尝试使用getInt
访问它。检查某处是否有某个putString("myIntPlusOneSaved", xxx)
并将其替换为putInt
。从旧版本的应用程序中,您的首选项中可能有一个String。然后,您可以删除自己的应用程序并重新安装,或仅删除myIntPlusOneSaved
首选项。