Закрыть активность с намерением. Андроид

Имеются 3 активности А > B > C; Далее хочу вернуться в активность В < C; с намерением выполнить перезагрузку В - onRefresh();
Пробовал так из С :

Intent intent = new Intent( C.this, B.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP );
    intent.putExtra("EXIT", true);
    startActivity(intent);  

И в активности В onCreate:

 if (getIntent().getBooleanExtra("EXIT", false)) {
        onRefresh();
    }

Но такой подход очищает и активность B.
Как вызвать onRefresh(); при закрытии активности C не очищая активность В?


Ответы (1 шт):

Автор решения: Tiarait

Думаю для этого подойдет onActivityResult()

Конкретно на вашем примере в активности В вызов активности С должен происходить как то так

Intent intent = new Intent(this, ActivityC.class);
..
startActivityForResult(intent, REQUEST_ACCESS_TYPE);

Так же в активности В должен быть переопределен метод onActivityResult

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode==REQUEST_ACCESS_TYPE) {
        if(resultCode==RESULT_REFRESH) {
            onRefresh();
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

И наконец в активности С перед ее закрытием мы посылаем RESULT_REFRESH - Активность С закрывается, а В в свою очередь остается прежней и получив RESULT_REFRESH выполнит onRefresh()

setResult(RESULT_REFRESH);
finish();

UPD

Так же можно куда то записывать boolean флаг для рефреша перед завершением активности С (например SharedPreferences или прости статическую переменную), а в активности В в методе onResume() смотреть если флаг true, то 'выключаем' его (false) и выполняем onRefresh()

→ Ссылка