在我的MainActivity上,我有一个计数器来跟踪“赢,输和输”,单击一个按钮后,将启动另一个活动,当该活动结束时,将询问用户是赢还是输还是输。我正在尝试更新我的主要活动上的计数器,但偏好设置似乎没有正确存储,在完成第二个活动并返回第一个活动之后,计数器会更新,但是当再次进入第二个活动时,计数器被清除并恢复为零。尽管先前使用成功,首选项似乎也没有保存。
调试没有完成任何事情,我将不胜感激!
来自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);
}
});
也许值得一提的是,我在第二项活动中运行了另一组偏好设置,用于跟踪一组不同的计数器,并且当用户完成游戏时,这些计数器将重置。
答案 0 :(得分:0)
启动活动时,它是一个新实例,并且不知道该活动的先前实例或它们的状态。您需要将其从主活动开始所需的任何状态数据传递给活动,您可以使用Intent的额外数据将数据传递给新活动。同样,当第二个活动结束时,它需要使用startActivityForResult将数据传递回第一个活动。
基本上,您的主要“活动”必须是存储所有持久状态的状态数据,然后将其传递和接收到子活动的地方。