Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


ViewPager dentro de Fragmento pierde contenido al volver a él

Estoy implementando tabhost usando FragmentActivity , bajo la primera pestaña i cargar un fragmento de bienvenida que contiene un Viewpager y CirclePageIndIcator , necesito cargar 4 vistas en el lado que WelcomeFragment

Este es mi fragmento de bienvenida

  • ¿Cómo utilizar el soporte FileProvider para compartir contenido con otras aplicaciones?
  • Obtenga un objeto json simple usando retrofit 2
  • Borrar las partes de mapa de bits mediante el modo PorterDuff
  • ¿Cómo crear aplicaciones Android con acceso root?
  • Algo como Twitter Bootstrap para Android?
  • El ajuste de coordenadas no ajusta
  •  public class WelcomeFragment extends Fragment { PageAdapter mAdapter; ViewPager mPager; CirclePageIndicator mIndicator; List<Fragment> fragments; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.frag_welcome_layout,null); mPager=(ViewPager)view.findViewById(R.id.myViewPager); mIndicator=(CirclePageIndicator)view.findViewById(R.id.circlePageIndicator1); fragments=new ArrayList<Fragment>(); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Fragment fragment; for(int i=0;i<4;i++) { fragment= Fragment.instantiate(getActivity(), TipsFragment.class.getName()); fragments.add(fragment); } mAdapter = new PageAdapter(getFragmentManager(),fragments); mPager.setAdapter(mAdapter); mIndicator.setViewPager(mPager); } } 

    Y este es mi adaptador de página

     public class PageAdapter extends FragmentPagerAdapter implements Serializable{ List<Fragment> fragments; public PageAdapter(FragmentManager fm,List<Fragment> frags) { super(fm); fragments = frags; } @Override public Fragment getItem(int arg0) { // TODO Auto-generated method stub return TipsFragment.newInstance(0, 0); } @Override public int getCount() { // TODO Auto-generated method stub return 4; } @Override public void destroyItem(ViewGroup container, int position, Object object) { FragmentManager manager = ((Fragment) object).getFragmentManager(); FragmentTransaction trans = manager.beginTransaction(); trans.remove((Fragment) object); trans.commit(); super.destroyItem(container, position, object); } } 

    Cuando cargue la aplicación primero, la carga de tabFragmentActivity correctamente y el viewpager dentro de welcomeFragment funciona bien, pero cuando me muevo a la 2ª pestaña y vuelvo a la 1ª pestaña de nuevo, ViewPager no se carga correctamente.

    ¿Cómo puedo resolverlo?

    Según la sugerencia que utilicé getChildFragmentManager pero la aplicación consiguió un error de error en logcat

     09-09 13:28:39.412: E/AndroidRuntime(3100): FATAL EXCEPTION: main 09-09 13:28:39.412: E/AndroidRuntime(3100): java.lang.IllegalStateException: No activity 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1091) 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086) 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1877) 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1492) 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947) 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440) 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.os.Handler.handleCallback(Handler.java:725) 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.os.Handler.dispatchMessage(Handler.java:92) 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.os.Looper.loop(Looper.java:137) 09-09 13:28:39.412: E/AndroidRuntime(3100): at android.app.ActivityThread.main(ActivityThread.java:5041) 09-09 13:28:39.412: E/AndroidRuntime(3100): at java.lang.reflect.Method.invokeNative(Native Method) 09-09 13:28:39.412: E/AndroidRuntime(3100): at java.lang.reflect.Method.invoke(Method.java:511) 09-09 13:28:39.412: E/AndroidRuntime(3100): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 09-09 13:28:39.412: E/AndroidRuntime(3100): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 09-09 13:28:39.412: E/AndroidRuntime(3100): at dalvik.system.NativeStart.main(Native Method 

    )

  • Biblioteca de procesamiento de imágenes para Android y Java
  • Volley error de excepción cuando el código de respuesta 304 y 200
  • Variable estática null al volver a la aplicación
  • Activa la aplicación MMS de Android para enviar mensajes pendientes
  • Adb remount permiso denegado, pero capaz de acceder a superusuario en shell - android
  • IntentService's onHandleIntent (Intent) obtiene nulo argumento
  • 3 Solutions collect form web for “ViewPager dentro de Fragmento pierde contenido al volver a él”

    Prueba esto:

      ViewPager pager = [your viewPAger] pager.setOffscreenPageLimit([quantity of tabs that you are going to use]); 

    Con esa oración (pager.setOffscreenPageLimit) puede especificar qué tan lejos puede estar una pestaña antes de que sea borrada por ViewPager!

    ¡Aclamaciones!

    Si está utilizando su ViewPager en un Fragment , cuando esté creando un nuevo adaptador, debería utilizar ChildFragmentManager :

     getChildFragmentManager() 

    Utilice un AsyncTask para establecer ViewPagerAdapter:

     private class SetAdapterTask extends AsyncTask<Void, Void, Void> { protected Void doInBackground(Void... params) { return null; } @Override protected void onPostExecute(Void result) { if(mPagerAdapter != null) mViewPager.setAdapter(mPagerAdapter); } } 

    Llámelo así:

     mAdapter = new PageAdapter(getChildFragmentManager(), fragments); new SetAdapterTask().execute(); 

    En lugar de llamar a:

     mViewPager.setAdapter(mPagerAdapter); 

    Y establecer el adaptador dentro del onCreateView(...) , no onActivityCreated(...).

    Además, use getChildFragmentManager () en lugar de getFragmentManager ().

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.