2015-03-26 3 views
2

У меня есть 4 фрагмента в ViewPager в действии. В одном из фрагментов я запускаю действие для результата и всегда получаю сбой при возврате к первой активности. Ошибка:onActivityResult в фрагменте фрагмента ViewPager

Process: com.mycom.android.myapp.debug, PID: 13505 
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=196610, result=0, data=Intent { }} to activity {com.mycom.android.myapp.debug/com.mycom.android.myapp.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.onActivityResult(int, int, android.content.Intent)' on a null object reference 
      at android.app.ActivityThread.deliverResults(ActivityThread.java:3539) 
      at android.app.ActivityThread.handleSendResult(ActivityThread.java:3582) 
      at android.app.ActivityThread.access$1300(ActivityThread.java:144) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1327) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5221) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.onActivityResult(int, int, android.content.Intent)' on a null object reference 
      at com.mycom.android.myapp.fragment.AgendaFragment.onActivityResult(AgendaFragment.java:415) 

Хотя я пытался закомментировать тело onActivityResult функции фрагмента, все еще происходит. Похоже, что фрагмент не восстанавливается во времени.

Как мне с этим справиться? tks

Обновление: Это мой onActivityResult в проблематичном фрагменте. Есть дочерние фрагменты, и я уверен, что в этих фрагментах есть @Override. Я пытаюсь прокомментировать тело цикла, все равно не повезло. Есть еще идеи? Благодарю.

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    LOGD(TAG, "onActivityResult called BEFORE calling super"); 

    super.onActivityResult(requestCode, resultCode, data); 
    LOGD(TAG, "onActivityResult called AFTER calling super"); 
    /**we need to broadcast this event to nested child fragments */ 
    List<Fragment> fragments = getChildFragmentManager().getFragments(); 
    if (!CollectionUtils.isEmpty(fragments)) { 
     for (Fragment fragment : fragments) { 
      if(fragment!=null){ 
       LOGD(TAG, "fragment not null"); 
       fragment.onActivityResult(requestCode, resultCode, data); 

      }else 
       LOGD(TAG,"fragment IS null"); 

     } 
    } 

} 

Update 2: так как я startActivity() во вложенном фрагменте AgendaFragment, следующий ответ pvshnik по адресу onActivityResult() not called in new nested fragment API Внутри ListFragment, который является дочерним фрагментом AgendaFragment, я

getParentFragment().startActivityForResult(intent, requestCode); 
+0

Вы переопределяете функцию onActivityResult , ошибка указывает, что виртуальный метод вызывается. добавьте @Override к методу, если у вас его нет. – faljbour

+0

Да, и я уже положил @Override, просто обновил мой код выше. –

+0

, так что строка 415 на вашем 'AgendaFragment' эта' фрагмент.onActivityResult (requestCode, resultCode, data); '? – kha

ответ

1

Вы можете попробовать следующее:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    List<Fragment> listOfFragments = getChildFragmentManager().getFragments(); 

    if(listOfFragments.size()>=1){ 
     for (Fragment fragment : listOfFragments) { 
      if(fragment instanceof yourFragmentName){ 
       fragment.onActivityResult(requestCode, resultCode, data); 
      } 
     } 
    } 

    super.onActivityResult(requestCode, resultCode, data); 
} 
Смежные вопросы