我有两个活动A,B。现在从A我通过按下按钮(使用startActivity()
)呼叫B,然后按返回键返回到A.现在当我再次按下按钮转到B时,会调用新的活动(如预期的那样)。
现在有人可以告诉我如何显示旧的B状态吗?
我读过这篇文章 Saving Android Activity state using Save Instance State,但无法帮助自己:(
public class B extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
if(savedInstanceState!=null){
EditText editText=(EditText)findViewById(R.id.editText1);
editText.setText(savedInstanceState.getString("EditBox"));
}
}
@Override
protected void onSaveInstanceState(Bundle onSaveInstanceState) {
System.out.println("B.onSaveInstanceState()");
super.onSaveInstanceState(onSaveInstanceState);
onSaveInstanceState.putString("EditBox","Hello");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
System.out.println("B.onRestoreInstanceState()");
super.onRestoreInstanceState(savedInstanceState);
EditText editText=(EditText)findViewById(R.id.editText1);
editText.setText(savedInstanceState.getString("EditBox"));
}}
我的A级
public class A extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button=(Button)findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new Intent(StartActivityforresultActivity.this,B.class);
startActivity(i);
}
});
}
答案 0 :(得分:6)
听起来你正试图做的事情有两个选择: 1.当调用B的onDestroy或onBackPressed时保存B的状态。您必须将其保存到内存中或使用某种持久性(SharedPreferences,本地文件等)将其写出来。然后每当B启动时,检查该数据是否存在并使用它来加载状态。 2.覆盖onBackPressed,以便在按下它时不会调用super.onBackPressed。而是在调用startActivity之前启动活动A的实例并将intent的标志设置为FLAG_ACTIVITY_REORDER_TO_FRONT。所以像这样:
Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
现在当你回击时,它应该找到活动堆栈中的A实例并将其带到前面。每次启动B时,您可能必须添加相同的标志。