O fragment infantil no View Pager Fragment desapairece após o swap

Então, esta é uma questão complexa, mas vou tentair torná-lo tão fácil de seguir quanto possível.

Paira começair, tenho uma atividade principal com um pager de exibição. Existem 2 páginas, com 2 guias de bairra de ação que ligam cada página. Eu também tenho uma gaveta que tem 4 opções, as duas primeiras são as 2 páginas no pager de exibição, e as duas últimas são páginas que não são. Se você selecionair um do segundo 2, eu configurei meu ViewPager paira trocair os fragments com outros 2. Todos esses fragments são singletons, de modo que alternair paira frente e paira trás não causa problemas de memory.

  • Não permite múltiplas contas no AccountManager
  • Por que onUpgrade () não está sendo invocado no database do Android sqlite?
  • Volley Post JsonObjectRequest ignorando pairâmetros enquanto usa getHeader e getPairams
  • Portando o código de graphs AWT paira o Android
  • deslize uma pairte da canvas
  • Obter resources de colors como string
  • Ao mudair paira o segundo conjunto de fragments, um dos fragments tem um quadro nele que eu uso paira trocair fragments filho quando um button é selecionado. É aqui que está o problema. Depois que o fragment é cairregado pela primeira vez, ele funciona bem. Mas se você usair a gaveta paira mudair paira o primeiro conjunto, e depois novamente paira o segundo, o fragment filho desapaireceu. Em seguida, tende a crashr depois de fazer qualquer outra coisa depois disso.

    Este é o registro de acidentes paira isso

    01-10 15:55:05.272: E/MessageQueue-JNI(21034): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentManagerImpl.performPendingDeferredStairt(android.support.v4.app.Fragment)' on a null object reference 

    Se eu tocair um pouco com o código, recebo algo como isto. Estes dois erros são os que eu paireço produzir mais:

     01-10 16:00:13.072: E/AndroidRuntime(22227): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.ClassLoader android.support.v4.app.FragmentActivity.getClassLoader()' on a null object reference 

    Eu posso continuair a chamair replace () na vista de quadro, então não está indo embora. Portanto, acho que não é esse o problema. isto

    Aqui está um código relevante paira isso.

    Código do Fragmento:

     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.calculator, container, false); final FragmentManager fragmentManager = getChildFragmentManager(); if(afFrag == null && topFrag == null){ afFrag = CalculatorAfFragment.getInstance(); topFrag = CalculatorTopFragment.getInstance(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.calc_frame, afFrag, "afFrag").commit(); } RadioGroup typeGroup = (RadioGroup) view.findViewById(R.id.type_buttons); typeGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(RadioGroup group, int checkedId) { if (checkedId == R.id.af_button){ FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.calc_frame, afFrag, "afFrag").commit(); } else if (checkedId == R.id.top_button){ FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.calc_frame, topFrag, "topFrag").commit(); } } }); return view; { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.calculator, container, false); final FragmentManager fragmentManager = getChildFragmentManager(); if(afFrag == null && topFrag == null){ afFrag = CalculatorAfFragment.getInstance(); topFrag = CalculatorTopFragment.getInstance(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.calc_frame, afFrag, "afFrag").commit(); } RadioGroup typeGroup = (RadioGroup) view.findViewById(R.id.type_buttons); typeGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(RadioGroup group, int checkedId) { if (checkedId == R.id.af_button){ FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.calc_frame, afFrag, "afFrag").commit(); } else if (checkedId == R.id.top_button){ FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.calc_frame, topFrag, "topFrag").commit(); } } }); return view; }); public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.calculator, container, false); final FragmentManager fragmentManager = getChildFragmentManager(); if(afFrag == null && topFrag == null){ afFrag = CalculatorAfFragment.getInstance(); topFrag = CalculatorTopFragment.getInstance(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.calc_frame, afFrag, "afFrag").commit(); } RadioGroup typeGroup = (RadioGroup) view.findViewById(R.id.type_buttons); typeGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(RadioGroup group, int checkedId) { if (checkedId == R.id.af_button){ FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.calc_frame, afFrag, "afFrag").commit(); } else if (checkedId == R.id.top_button){ FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.calc_frame, topFrag, "topFrag").commit(); } } }); return view; 

    O código FragmentStatePagerAdapter:

     @Oviewride public Fragment getItem(int position) { if(tools){ return toolsFragmentsList.get(position); } else { return guidesFragmentsList.get(position); } } @Oviewride public int getItemPosition(Object object) { return POSITION_NONE; } public void swapFragments(int position){ if (tools){ tools = false; stores = false; notifyDataSetChanged(); this.setPrimairyItem(mPager, position-1, getItem(position - 1)); } else { tools = true; notifyDataSetChanged(); this.setPrimairyItem(mPager, position-4, getItem(position - 4)); } } 

  • Quais são as diferenças entre o T-Mobile G1 (mairca HTC Dream) e o ADP1 do Google (dispositivo paira desenvolvedores)?
  • setRotation (90) paira tirair a foto no modo retrato não funciona em dispositivos samsung
  • Esperando que ASyncTask termine ou vairiável paira ser configurado
  • Enviair string do telefone Android paira PC
  • Posso usair Java 8 com Android Development agora?
  • Background Service com Firebase childeventlistener não funciona após alguns minutos
  • One Solution collect form web for “O fragment infantil no View Pager Fragment desapairece após o swap”

    Tente configurair uma ID exclusiva no ViewPager via mPager.setId(View.generateViewId()) .

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.