Состояние активности сохранения - PullRequest
4 голосов
/ 01 декабря 2011

У меня есть два вида деятельности A, B.Теперь из A я позвоню B, нажав кнопку (используя startActivity()), затем нажмите кнопку Назад, чтобы вернуться к A.Теперь, когда я снова нажимаю кнопку, чтобы перейти к B, вызывается новая активность (как и ожидалось).

Теперь может кто-нибудь сказать мне, как показать старое предыдущее состояние B?

Я читал эту статью Сохранение состояния активности Android с использованием 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);
        }
    });


}

1 Ответ

6 голосов
/ 01 декабря 2011

С тем, что вы пытаетесь сделать, у вас есть два варианта: 1. Сохраните состояние B, когда вызывается onDestroy или onBackPressed. Вам придется сохранить это в памяти или записать, используя какое-то постоянство (SharedPreferences, локальный файл и т. Д.). Затем при каждом запуске B проверьте, существуют ли эти данные, и используйте их для загрузки состояния. 2. Переопределите onBackPressed, чтобы при его нажатии вы не вызывали super.onBackPressed. Вместо этого запустите экземпляр действия A и установите флаги вашего намерения равными FLAG_ACTIVITY_REORDER_TO_FRONT перед вызовом startActivity. Так что-то вроде этого:

    Intent intent = new Intent(this, A.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    startActivity(intent);

Теперь, когда вы наносите ответный удар, он должен найти экземпляр A, который находится в вашем стеке активности, и просто перенести его на фронт. Возможно, вам придется добавить один и тот же флаг всякий раз, когда вы начинаете B.

...