android - обновить родительскую активность, когда дочерняя активность заканчивается
У меня есть родительская активность, которая запускает дочернюю активность.
В детской деятельности я занимаюсь:
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Ride");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Когда я нажимаю кнопку Home/Up, я finish
активность.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
И кроме того, я делаю finish
В еще одном месте в Детском Деятельности, и в обоих местах, где у меня есть finish
, это восходит к родительской активности.
Мой вопрос:
Моя проблема в том, что я хочу обновить Родительскую активность только в случае одного из finishes
,
Когда я выполняю финишную операцию не с помощью кнопки "Вверх" - данные в "Родительской активности" изменяются, поэтому - когда я нажимаю кнопку "Назад / Вверх", нет необходимости обновлять " Родителя", но когда я выполняю другую finish
Я хочу обновить Родителя.
Как я могу это обнаружить?
6 ответов
Начните детскую деятельность как
startActivityForResult(intent, requestCode)
А в случае нажатия кнопки вверх установите результат как успех в дочерней деятельности, а в случае возврата нажмите результат как сбой.
И в onActivityResult(..)
родительской активности получить статус и убить родительскую активность в нужном случае.
В родительской деятельности
startActivityForResult(Intent intent, int REQUEST_CODE);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
case RESULT_OK:
//refresh parentAcitivty
//get the result from the Up button back
//e.g adapter.notifydatasetchanged()
case RESULT_CANCEL:
//Do nothing
//return from childActivity by other finishes
В ChildActivity
case 1: //**from the Up button**
setResult(RESULT_CANCEL);
finish();
case 2: //**do the other finish**
setResult(RESULT_OK);
finish();
Я надеюсь, что код даст вам подсказку.
В этом случае используйте onResume
,
@Override
protected void onResume() {
super.onResume();
// your code (for example: initialize(); etc.. )
}
Если вы обратитесь к этой статье, вы поймете, почему.
У вас есть метод finish() в двух местах, как описано. Одна - это кнопка "Назад" на панели действий (пусть она будет называться AbBack), а другая - в каком-то другом месте (RandomBack).
Пусть A будет основным действием, а B будет дочерним действием.
В A вместо метода startActivity() используйте
startActivityForResult(Intent intent, int REQUEST_CODE);
Это сделано для того, чтобы действие B после завершения могло возвращать данные в это действие, и в зависимости от данных вы можете обновлять / не обновлять
Итак, в упражнении B
В случае AbBack, вызовите этот метод setResult (RESULT_OK); и для RandomBack вызовите setResult (RESULT_CANCELED);
Наконец, в упражнении А вы должны переопределить метод
onActivityResult(int requestCode, int resultCode, In
данные палатки)
где вы можете сравнить resultCode == RESULT_OK, и если это так, это означает, что данные взяты из AbBack или, если нет, из RandomBack, и выполнить необходимое обновление.
Используйте NavUtils.navigateUpFromSameTask(это); Функция onBackPressed так:
@Override
public void onBackPressed() {
super.onBackPressed();
NavUtils.navigateUpFromSameTask(this);
}