Я знаю, что есть много сообщений о том, почему onActivityResult() не вызывается во Фрагменте, когда startActivityForResult() вызывается из фрагмента; но мое дело другое.onActivityResult() не вызвано основной деятельностью, когда новая активность начинается с фрагмента
Моя активность A имеет фрагмент F, который начинает действие B для результата. В этом фрагменте отсутствует результат. Проблема в том, что при перезапуске активности A он асинхронно строит весь его вид, используя AsynTask, который вызывается во время onResume(). В результате, мой фрагмент F охватывается активность А.
В моем фрагменте, я начинаю активность, как это:
startActivityForResult(intent, NewElementFragment.CODE_IMAGE_PATH);
Так что я подумал, не стоит беспокоиться, я не знаю, что onResume() называется после onActivityResult(), так что все, что мне нужно сделать, это убедиться, что в onActivityResult() представление не будет создано во время onResume().
Я создал логический, что я поставил ложь во onActivityResult(), как это:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//put the NewElementFragment back on top
if (requestCode == NewElementFragment.CODE_IMAGE_PATH){
//we set loadinfo to false so that the activity view won't get built
this.loadInfo = false;
Log.d("MainActivity","the loadInfo boolean was set to false");
}
//Do default action on result (nothing) so that the result is passed on the the fragments
super.onActivityResult(requestCode, resultCode, data);
}
Но это не сработало, потому что, видимо, onActivityResult() никогда не был вызван в моей деятельности A (несмотря на то, как я сказал, прежде чем он полностью срабатывает в моем фрагменте).
Так что в конце концов я проверил на резюме, если у меня был активный фрагмент, и если да, то прервать создание вид, как это:
protected void onResume(){
super.onResume();
/*
* We check if there is a fragment built that should be visible. If yes, we don't build the view
*/
NewElementFragment f = (NewElementFragment) getFragmentManager().findFragmentByTag(TAG_NEW_ELEMENT_FRAGMENT);
if (f!=null){
loadInfo = false;
}
//We call the GetProductDetailTask
if (loadInfo) new GetProductDetailTask(pId).execute();
}
Это работает, но я нахожу это весьма некрасиво. Может ли кто-нибудь сказать мне, почему onActivityResult() никогда не вызывается в моей деятельности A?
Или если у кого-то есть лучшее решение, чтобы убедиться, что мой фрагмент не охвачен моей деятельностью при его перезапуске?
спасибо.