我有一个带有简单TextView的活动,显示一个数字。 使用按钮,我在数字中添加或删除值1(并从局部变量int points中添加);
问题是:
如果我在数字上加1,然后打开设置活动(在代码中我不调用finish()方法,因此主活动不会调用onDestroy()方法),或者如果我按下Home按钮,当我返回主活动时,显示的数字(以及int points变量)显示为从未更改过。
另一方面,如果我修改数字,然后将带有Intent的值传递给主要活动的另一个副本,则值会正确存储,并且即使在按下
后也会显示更改mainActivity中设置点的代码(在onResume()中)
// Set POINTS
Points = (TextView) findViewById(R.id.Points);
if( getIntent().getExtras() != null) //get intent
{
points = getIntent().getExtras().getInt("points");
Points.setText(String.valueOf(points));
}
else
{
points = Integer.parseInt((String)(Points.getText()));
}
MainActivity中将Intent发送到另一个MainActivity的代码:
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("points", points);
startActivity(toMulti);
overridePendingTransition(R.anim.anim_in, R.anim.anim_out);
finish();
MainActivity中将意图发送到设置的代码:
Intent toSettings = new Intent(this, SettingsSingle.class);
startActivity(toSettings);
按钮代码:
public void plus1(View view)
{
points = Integer.parseInt((String)(Points.getText()));
points = points + 1;
Points.setText(String.valueOf(points));
}
答案 0 :(得分:1)
您可以保留TextView
值onPause();
并重新创建onResume();
。这可以使用SharedPreference
完成,如下所示。
@Override
public void onPause() {
super.onPause(); // Always call the superclass method first
String yourStringValues = yourTextView.getText().toString();
// We need an Editor object to make preference changes.
// All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("yourKey", yourStringValue);
// Commit the edits!
editor.commit();
}
当你恢复Activity
@Override
public void onResume() {
super.onResume(); // Always call the superclass method first
// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
String yourRetrievedStringValue = settings.getString("yourKey", "");
TextView yourTextView = findViewById(R.id.yourTextViewId);
yourTextView.setText(yourRetrievedStringValue);
}