保存活动状态

Cod*_*ife 4 android workflow-activity android-activity

我有两个活动A,B.现在从A i按下按钮(使用startActivity())调用B ,然后按返回键返回到A. 现在当我再次按下按钮转到B时,会调用新的活动(如预期的那样).

现在有人能告诉我如何显示旧的B状态吗?

我已经阅读了这篇文章 使用保存实例状态保存Android活动状态,但无法帮助自己:(

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"));
}}
Run Code Online (Sandbox Code Playgroud)

我的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);
        }
    });


}
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 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);
Run Code Online (Sandbox Code Playgroud)

现在,当你回击时,它应该找到活动堆栈中的A实例并将其带到前面.每次启动B时,您可能必须添加相同的标志.