2014-12-31 2 views
1

Я знаю, что есть много сообщений о том, почему 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?

Или если у кого-то есть лучшее решение, чтобы убедиться, что мой фрагмент не охвачен моей деятельностью при его перезапуске?

спасибо.

ответ

0

Ваш хостинг должен реализовать некоторый интерфейс, и вы должны называть его из вашего фрагмента. В реализации этого интерфейса вы можете вызвать другое действие через startActivityForResult(). В этом случае вы достигнете успеха в обработке onActivityResult().

Смежные вопросы