我有一个包含3项活动的应用home
,calculationResult
和help
。我要做的是在calculationResult
时保存计算的详细信息用户导航到help
。因此,当用户在help
并按下操作栏后退图标时,计算结果仍会显示在calculationResult
中。
到目前为止,我已按照本指南尝试实现此目的:Recreating an activity,但是当我实现它时,使用savedInstanceState
时无法识别我想要存储的变量。以下是如何我已经尝试在结果类中执行此操作。有人可以指出我在哪里出错或者这是否是完成保存活动状态的正确方法?
public class CalcResult extends Activity implements OnClickListener{
TextView result1;
static final String MARK1 = "marking1";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.result);
if (savedInstanceState != null) {
// Restore value of members from saved state
//not recognizing this variable mark1 which I'm setting to the variable that stores the result of the calculation.
mark1 = savedInstanceState.getDouble(MARK1);
}
final Intent intent1=new Intent(this,AboutActivity.class);
final Intent intent2=new Intent(this,MainActivity.class);
final Intent intent3=new Intent(this,MainActivity.class);
final ViewGroup actionBarLayout = (ViewGroup) getLayoutInflater().inflate(
R.layout.a,
null);
// Set up your ActionBar
final ActionBar actionBar = getActionBar();
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setCustomView(actionBarLayout);
final Button actionBarHome = (Button) findViewById(R.id.action_bar_title);
actionBarHome.setBackgroundResource(R.drawable.ic_action_back);
actionBarHome.setOnClickListener(this);
actionBarHome.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(intent2);
}
});
final Button actionBarInfo = (Button) findViewById(R.id.action_bar_staff);
actionBarInfo.setBackgroundResource(R.drawable.ic_action_help);
actionBarInfo.setOnClickListener(this);
actionBarInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(intent1);
}
});
final Button actionBarHoome = (Button) findViewById(R.id.action_bar_home);
actionBarHoome.setBackgroundResource(R.drawable.appicon);
actionBarHoome.setOnClickListener(this);
actionBarHoome.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(intent3);
}
});
result1 = (TextView)findViewById(R.id.markOne);
Intent intent = getIntent();
double markOne = intent.getDoubleExtra("number1", 0);
DecimalFormat df = new DecimalFormat("#.##");
result1.setText(String.valueOf(df.format(markOne)+"mm"));
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
//Also doesn't recognise markOne here ->
savedInstanceState.putDouble(MARK1, this.markOne);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
答案 0 :(得分:0)
下次启动活动时,将调用onRestoreInstanceState()。“
但在你的情况下,这可能不会发生。
答案 1 :(得分:0)
方法我跟着
如果我是第一次启动此活动,我将全局变量设置为标志。如果全局变量与我设置的相同,我将保持editText不变。 (在您的情况下,result1)。如果值已更改,我为此值设置editText。如果用户偶尔单击editText,我会跟踪更改并存储该值。如果您认为不再需要mark1,可以将flag的值再次设置为“FIRSTENTRY”。这会奏效。
如果您仍然遇到问题,请尝试告诉我们。
第1步
创建一个类来存储静态全局变量。
public class Constants {
public static String sFlag= "FIRSTENTRY";
}
第2步
在“setContentView(R.layout.result);”之后添加这段代码。你的oncreate方法中的一行。 我已将result1声明为EditText。
,而不是TextViewif(!Constants.sFlag.equalsIgnoreCase("FIRSTENTRY"))
{
result1.setText(Constants.sFlag);
}
result1.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
Constants.sFlag = result1.getText().toString();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Constants.sFlag = result1.getText().toString();
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
Constants.sFlag = result1.getText().toString();
}
});
答案 2 :(得分:0)
而不是这个
double markOne = intent.getDoubleExtra("number1", 0);
你应该写
markOne = intent.getDoubleExtra("number1", 0);
通过再次声明,您没有将值分配给班级markOne
您也可以尝试将calculateResult活动的lauchmode设置为singleTop
android:launchMode="singleTop"
这将使用堆栈顶部已存在的活动的相同实例,因此将具有与之前相同的状态。
当您转到Help
活动时,请尝试在CalculationResult
活动中调用完成。
代表:
StartActivity(<Intent>);
finish();