2012-02-05 3 views
5

У меня есть два вида деятельности (activity1 и activiy2), и каждое действие имеет по одной кнопке. В activity1 у меня есть счетчик с несколькими вариантами. Предположим, что я выбираю вариант 2 из этого счетчика, и я нажимаю кнопку в действии1, затем начинается действие2. Когда я нажимаю кнопку «назад», активность 1 возобновляется, и одна и та же опция 2 видна (как и мне). Теперь проблема в том, что если моя активность2 запущена и я нажимаю на нее кнопку, запускается action1. Но вместо возобновления предыдущего состояния активности1 он запускается таким образом, что он только что был создан, и предыдущий выбор изменился. Как я могу получить тот же объект, что и кнопка «Назад» (а не возможность вернуться к предыдущей деятельности, я имею в виду автоматическое возобновление предыдущего состояния любой активности), даже когда я снова начну свою деятельность. Просто мне нужно знать, как сохранить предыдущее состояние активности, если оно снова посещено.Как сохранить предыдущее состояние активности

Именно с этим кодом, я иду от одного вида деятельности к другому при нажатии кнопки:

Intent intent=new Intent(); 
intent.setClassName(getApplicationContext(),"com.myapp.activityname"); 

startActivity(intent); 

Просьба помочь меня.Я новичок в Android, так что если один дает ответ, пожалуйста, объясните это немного. Спасибо в adavnce

+0

Документация для этого находится здесь: http://developer.android.com/reference/android/app/Activity.html –

ответ

9

Думаю, я нашел ответ. Позвольте мне рассказать, что я сделал простыми словами:

Предположим, что у меня есть два вида деятельности activity1 и activity2, и я перемещаюсь с activity1 на activity2 (я сделал некоторые работы в activity2) и снова вернулся к активности 1, нажав на кнопку в действии1. Теперь на этом этапе я хотел вернуться к активности2, и я хочу видеть свою активность2 в том же состоянии, когда я последний раз оставил activity2.

Для приведенного выше сценария, что я сделал, что в манифесте я сделал некоторые изменения, как это:

<activity android:name=".activity2" 
      android:alwaysRetainTaskState="true" 
      android:launchMode="singleInstance"> 
</activity> 

И в activity1 на события нажатия кнопки я сделал так:

Intent intent=new Intent(); 
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
intent.setClassName(this,"com.mainscreen.activity2"); 
startActivity(intent); 

И в деятельности2 на события нажатия кнопки я сделал так:

Intent intent=new Intent(); 
intent.setClassName(this,"com.mainscreen.activity1"); 
startActivity(intent); 

что теперь точн Случается, что все изменения, которые мы внесли в Activity2, не будут потеряны, и мы можем рассматривать activity2 в том же состоянии, что и раньше.

Я считаю, что это ответ, и это отлично работает для меня.

+0

Пожалуйста, прекратите публиковать этот ответ снова и снова. Если вы найдете повторяющиеся вопросы, отметьте их как таковые. – Mat

3

Переопределяя обработчик события onSaveInstanceState, вы можете использовать его параметр Bundle для сохранения значений экземпляра. Вот пример:

@Override 
public void onSaveInstanceState(Bundle outState) { 
    // Retrieve the View 
    TextView myTextView = (TextView)findViewById(R.id.myTextView); 
    // Save its state 
    outState.putString("My text", 
    myTextView.getText().toString()); 
    super.onSaveInstanceState(outState); 
} 

Сохраненная Bundle передается в onRestoreInstanceState и onCreate методов, если приложение принудительно перезапустить во время сеанса. Затем вы можете извлекать значения из Bundle и использовать их для обновления состояния экземпляра Activity. Вот пример:

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 
    TextView myTextView = (TextView)findViewById(R.id.myTextView); 
    String text = “”;  
    if (icicle != null && icicle.containsKey("My text")) { 
     text = icicle.getString(TEXTVIEW_STATE_KEY); 
    } 
    myTextView.setText(text); 
} 

Важно помнить, что onSaveInstanceState вызывается только тогда, когда активность становится неактивным, но не тогда, когда она закрывается с помощью вызова finish или пользователем нажатием на кнопку Назад.

+0

Немного объясните пожалуйста –

+0

см. Обновленный ответ. –

+0

Что касается всего состояния предыдущей деятельности. Я имею в виду, что деятельность находится на заднем плане, есть ли способ просто вернуть ее назад. Я имею в виду, что если в этой деятельности задействовано много потоков, я считаю, что лучший вариант - привести его вперёд. –

0

Скачать source code или увидеть the entire post

Для деятельности одного, вам нужно использовать функцию startActivityForResult(), которая возвращает значения родительской активности, которая является деятельность один.

Intent intent = new Intent(MainActivity.this, Activity2.class); 
    startActivityForResult(intent, 1); 

И получить значение от активности два без изменения активности одного, добавьте следующий код

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      if (requestCode == 1) { 
       if(resultCode == RESULT_OK){ 
        String text=data.getStringExtra("text"); 
        vTxt.setText("Name 1: "+eTxt.getText()+ "\n Name 2: "+text); 
       } 
      } 
     } 

активность 2

добавить следующий код, чтобы вернуться к деятельности одного и передать некоторые значения

  Intent intent=new Intent(Activity2.this, MainActivity.class); 

      Bundle extra=new Bundle(); 

      extra.putString("text", eTxt.getText().toString()); 
      intent.putExtras(extra); 
      setResult(RESULT_OK, intent); 
      finish(); 

Наконец-то вы закончили

Смежные вопросы