Android Обновить активность, когда возвращается к нему - PullRequest
12 голосов
/ 23 ноября 2011

Мне нужна небольшая помощь в обновлении одного из моих действий в моем приложении.Я использую активность на вкладке, подключаюсь к веб-службе и загружаю некоторые данные из одного из моих дочерних действий.Когда я нажимаю кнопку синхронизации в моем дочернем действии, я запускаю новое действие, которого нет в хосте вкладок, и когда синхронизация завершается, он возвращается к своему родителю (дочернему действию).Единственное, чего я хочу достичь - это обновить активность, когда я вернусь к ней.Проверив через Интернет, я обнаружил, что лучший вариант сделать это - использовать startActivityForResult, но я не совсем понимаю, как его использовать и как обновить действие, когда я получу результат от завершенного действия.

Если кто-нибудь может мне помочь, я буду очень рад. Спасибо!

РЕДАКТИРОВАТЬ:

Я использую этот код, и он даже не показывает Вход в систему onActivityResult

MyCollectionId.class:

Intent intent = new Intent(MyCollectionId.this, Synchronization.class);
intent.putExtra("process", 2);
startActivityForResult(intent, 1);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 if(resultCode==RESULT_OK){
     Log.e("","OnActivityResult");
    Intent refresh = new Intent(this, MyCollectionId.class);
    startActivity(refresh);
    this.finish();
 }
}

Синхронизация.класс:

Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
setResult(RESULT_OK,intent);
finish();

Ответы [ 5 ]

24 голосов
/ 23 ноября 2011

при нажатии кнопки:

Intent intent = new Intent(this, SyncActivity.class);
        //intent.putExtra("someData", "Here is some data");
        startActivityForResult(intent, 1);

Затем в том же классе активности:

   @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if(resultCode==RESULT_OK){
         Intent refresh = new Intent(this, InitialActivity.class);
         startActivity(refresh);
         this.finish();
      }
     }

Синхронизация будет иметь:

setResult(RESULT_OK, null);
finish();
10 голосов
/ 23 ноября 2011

Еще один хитрый способ сделать это - просто начать свою деятельность на onRestart()

@Override
public void onRestart(){
    super.onRestart();
    Intent previewMessage = new Intent(StampiiStore.this, StampiiStore.class);
    TabGroupActivity parentActivity = (TabGroupActivity)getParent();
    parentActivity.startChildActivity("StampiiStore", previewMessage);
    this.finish();
}

Это должно сработать. (В этом коде я показываю, как это делается, когда вы используете собственный менеджер TabActivity.)

4 голосов
/ 23 ноября 2011

Вы должны обработать результат действия, которое вы начали с «startActivityForResult» в родительском действии в методе:

@override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
   //...
}

И в зависимости от результата вы можете просто снова вызвать код, который отвечает за показинформация в родительском действии (может быть, вы положили ее в метод onResume () или тому подобное).

Я бы предложил перенести всю логику, отвечающую за отображение информации, на отдельный метод.И вызвать его после того, как вы получите результат.Вместо перезапуска родительской активности.

3 голосов
/ 23 ноября 2011

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

Если вы переопределите его, вы можете обновить своеактивность оттуда.

Подробнее здесь и здесь

2 голосов
/ 23 ноября 2011

Вызовите дочернее действие с помощью startActivityForResult с кодом запроса SetResult из дочернего действия.И когда дочернее действие завершено, вы можете обновить родительское действие в методе onActivityResult

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);

      //Check the result and request code here and update ur activity class

    }

Вот пример http://rahulonblog.blogspot.com/2010/05/android-startactivityforresult-example.html

...