Активность Android Refresh при возврате на него
Мне нужна небольшая помощь в освещении одного из моих действий в моем приложении. Я использую активность вкладки и подключение к веб-сервису и загрузку некоторых данных из одной из моих дочерних действий. Когда я нажимаю кнопку синхронизации в своем дочернем действии, я запускаю новое действие, которое не находится в узле табуляции, и когда синхронизация завершена, он возвращает ему родительский (дочерняя активность). То, что я хочу достичь, - это обновить активность, когда я вернусь к ней. Когда я проверил через Интернет, я обнаружил, что лучший способ сделать это - использовать startActivityForResult
, но я действительно не понимаю, как его использовать и как обновлять активность, когда я получаю результат от законченной деятельности.
Если кто-нибудь может мне помочь, я буду очень рад. Спасибо!
EDIT:
Я использую этот код, и он даже не показывает журнал 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();
}
}
Synchronization.class:
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
setResult(RESULT_OK,intent);
finish();
Ответы
Ответ 1
Еще один сложный способ сделать это - просто начать свою деятельность на 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.)
Ответ 2
При нажатии кнопки:
Intent intent = new Intent(this, SyncActivity.class);
//intent.putExtra("someData", "Here is some data");
startActivityForResult(intent, 1);
Затем в том же классе Activity:
@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();
Ответ 3
Вы должны обработать результат действия, который вы начали с "startActivityForResult" в родительской активности в методе:
@override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//...
}
И в зависимости от результата вы можете просто снова вызвать код, который отвечает за отображение информации в родительской активности (может быть, вы помещаете ее в метод onResume() или тому подобное).
Я бы предложил вам переместить всю логику, ответственную за передачу информации, на отдельный метод. И вызывать его после получения результата. Вместо перезапуска родительской активности.
Ответ 4
Если вы начнете свое второе действие с помощью метода startActivityForResult
, когда вы вернетесь к первому действию, будет вызван onActivityResult
первого действия.
Если вы переопределите его, вы можете обновить свою активность оттуда.
Подробнее здесь и здесь
Ответ 5
Вызвать дочернюю активность, используя 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