启动活动时未保存java首选项并清除变量
在我的MainActivity上,我有一个计数器跟踪赢家、平手和输家,单击按钮后,启动另一个活动,当该活动完成时,询问用户他们是赢了、平手还是输家。我正在尝试更新主活动上的计数器,但首选项似乎没有正确存储。在完成第二个活动并返回第一个活动后,计数器会更新,但当再次转到第二个活动时,计数器会被清除并恢复为零。这些首选项似乎也没有保存,尽管之前已成功使用
调试没有任何结果,如果有任何意见,我将不胜感激
从主要活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
new FlurryAgent.Builder().withLogEnabled(true).build(this, "");
setContentView(R.layout.activity_main);
SharedPreferences pref = getApplicationContext().getSharedPreferences("MainPref", MODE_PRIVATE);
final SharedPreferences.Editor editor = pref.edit();
editor.putInt("wins", numberOfWins);
editor.putInt("draws", numberOfDraws);
editor.putInt("losses", numberOfLosses);
numberOfWins = pref.getInt("wins", 0);
numberOfDraws = pref.getInt("draws", 0);
numberOfLosses = pref.getInt("losses", 0);
TextView wins = findViewById(R.id.numberOfWins);
wins.setText(String.valueOf(numberOfWins));
TextView draws = findViewById(R.id.numberOfDraws);
draws.setText(String.valueOf(numberOfDraws));
TextView losses = findViewById(R.id.numberOfLosses);
losses.setText(String.valueOf(numberOfLosses));
editor.commit();
从第二次活动开始:
final ImageButton completeBattle = findViewById(R.id.completeBattle);
completeBattle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Dialog dialog = new Dialog(BattleActivity.this);
dialog.setContentView(R.layout.custom_dialog);
dialog.show();
Button cancelBtn = dialog.findViewById(R.id.cancelBtn);
cancelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
Button winBtn = dialog.findViewById(R.id.winBtn);
winBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.numberOfWins++;
editor.clear();
editor.commit();
dialog.dismiss();
Intent intent = new Intent(BattleActivity.this, MainActivity.class);
startActivity(intent);
}
});
Button drawBtn = dialog.findViewById(R.id.drawBtn);
drawBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.numberOfDraws++;
editor.clear();
editor.commit();
dialog.dismiss();
Intent intent = new Intent(BattleActivity.this, MainActivity.class);
startActivity(intent);
}
});
Button loseBtn = dialog.findViewById(R.id.loseBtn);
loseBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.numberOfLosses++;
editor.clear();
editor.commit();
dialog.dismiss();
Intent intent = new Intent(BattleActivity.this, MainActivity.class);
startActivity(intent);
}
});
值得一提的是,我在第二个活动中运行了另一组首选项,用于跟踪不同的计数器集,当用户完成游戏时,这些计数器将重置
# 1 楼答案
当您启动一个活动时,它是一个新实例,不知道该活动的以前实例或它们的状态。您需要将需要从主活动启动的任何状态数据传递给活动,您可以使用意图的额外数据将数据传递给新活动。类似地,当第二个活动完成时,它需要使用startActivityForResult将数据传递回第一个活动
基本上,您的主要活动需要存储所有持续存在的状态数据,然后将这些数据传递和接收给您的子活动