2015-06-22 3 views
-1

У меня есть n количество фрагментов (содержащих динамические виды). Допустим, что фрагмент A-> B-> C. Теперь, когда я нажимаю назад (используя popbackstack), его A-> B. Теперь, когда нажимаем рядом с файлом Fragment C, я получаю исключение с нулевым указателем на «getFragmentManager». Как достичь этого.Как перейти к следующему фрагменту после popbackstack

@Override 
public void onBackPressed() { 
    if(getFragmentManager().getBackStackEntryCount() > 0) { 
     RequirementFragment.reqIndex = RequirementFragment.reqIndex -1; 
     getFragmentManager().popBackStack(); 
    } 
    else 
     super.onBackPressed(); 
} 

В приложении есть следующая кнопка, которая переходит к следующему фрагменту. Ниже приведена следующая кнопка onclick funtion.

private void goToNextQuestion() { 

     Activity parentActivity = getActivity(); 
     FragmentManager fm = parentActivity.getFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 

     RequirementFragment nextQuestion = new RequirementFragment(); 
     nextQuestion.setArguments(getFragmentAttribs(reqIndex + 1)); 

     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); 
     ft.replace(R.id.s6_lin_layout_question_wrapper, nextQuestion); 
     ft.addToBackStack(String.valueOf(reqIndex)); 
     ft.commit(); 
    } 

Вход:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.app.Activity.getSystemService(java.lang.String)' on a null object reference 
      at mobileapp.fragments.RequirementFragment.getTextBoxSubmission(RequirementFragment.java:605) 
      at mobileapp.fragments.RequirementFragment.saveRequirementSubmission(RequirementFragment.java:774) 
      at mobileapp.fragments.RequirementFragment.goToNextQuestion(RequirementFragment.java:836) 
      at com.localoye.mobileapp.fragments.RequirementFragment.access$100(RequirementFragment.java:73) 
      at com.localoye.mobileapp.fragments.RequirementFragment$2.onClick(RequirementFragment.java:149) 
      at android.view.View.performClick(View.java:4785) 
      at android.view.View$PerformClick.run(View.java:19884) 
      at android.os.Handler.handleCallback(Handler.java:739) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5343) 
      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:905) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 
+0

Не могли бы вы вывести результат Logcat? –

+0

@ThyenHongGuedesChang добавил .. – Govind

ответ

0

Попробуйте этот код ..

private void loadFragment(Fragment fragment, String classTag) { 
     FragmentManager fragmentManager = getFragmentManager(); 

     if(fragmentManager.findFragmentByTag(classTag) != null) { 
      LogUtility.printInfoMessage(CLASSTAG+":loadFragment -- fragment already loaded "+classTag); 
      return; 
     } 

     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.summaryFragmentContainer, fragment, classTag); 
     fragmentTransaction.commit(); 
    } 
+0

Нет, его не работает .. Исключение Nullpointer выбрасывается. – Govind

0

решаемая. popBackStack() удаляет экземпляр текущего фрагмента, поэтому, когда вы снова вызываете фрагмент, который уже используется (callfragmentbytag), он возвращает null. Таким образом, единственный возможный способ - «добавить/скрыть» фрагменты в таком сценарии и не использовать «replace».

Отрегулируйте откидные кнопки, чтобы вернуться к предыдущим фрагментам.

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