¿Cómo puedo hacer que mi ViewPager cargue solo una página a la vez, es decir, setOffscreenPageLimit (0);

Entiendo que el número más bajo que puedo dar a setOffscreenPageLimit(int) es 1. pero necesito cargar una página a la vez debido a problemas de memoria.

¿Voy a tener que usar el viejo estilo tabhost, etc.? o hay una forma / pirateo puedo hacer que mi viewPager cargue una página a la vez?

Mi adaptador amplía BaseAdapter con el patern ViewHolder.

Estaba teniendo el mismo problema y encontré la solución para ello:

Pasos:

1) Primero descargue la clase CustomViewPager desde este enlace.

2) Usa esa clase como se menciona a continuación:

En Java:

 CustomViewPager mViewPager; mViewPager = (CustomViewPager) findViewById(R.id.swipePager); mViewPager.setOffscreenPageLimit(0); 

En XML:

  

Ahora solo se cargará una página a la vez.

Por lo que sé, eso no es posible cuando se utiliza ViewPager . Al menos no, cuando quieres que tus páginas se puedan deslizar.

La explicación por lo tanto es muy simple:

Cuando desliza dos páginas, hay un Punto en el que ambas páginas deben estar visibles, ya que no puede deslizar entre dos cosas cuando una de ellas ni siquiera existe en ese punto.

Consulte esta pregunta para obtener más información: ViewPager.setOffscreenPageLimit (0) no funciona como se esperaba

CommonsWare brindó una buena explicación en los comentarios de su respuesta .

pero necesito cargar una página a la vez debido a problemas de memoria.

Eso supone que está obteniendo OutOfMemoryError s.

¿Voy a tener que usar el viejo estilo tabhost, etc.?

Sí, o FragmentTabHost , o tabs de la barra de acciones.

o hay una forma / pirateo puedo hacer que mi viewPager cargue una página a la vez?

No, por la simple razón de que ViewPager necesita más de una página a la vez para la animación deslizante. Puedes ver esto usando una ViewPager y deslizando.

O bien, puede solucionar sus problemas de memoria percibidos. Suponiendo que esta aplicación es la misma que informó el día de hoy , solo está utilizando 7 MB de espacio de montón. Eso solo dará como resultado OutOfMemoryError s si su montón restante está muy fragmentado. Existen estrategias para la gestión de la memoria (p. Ej., En inBitmap en BitmapOptions para crear mapas de bits a partir de fonts externas) que ayudan a abordar estos problemas de fragmentación.

Mi adaptador amplía BaseAdapter con el patern ViewHolder.

BaseAdapter es para usar con AdapterView , no con ViewPager .

Puede usar FragmentStatePagerAdapter . Esto permite que el buscapersonas se aferre a mucha menos memoria. Elimina por completo las instancias de Fragment de FragmentManager una vez que están fuera de scope. El estado de los Fragmentos eliminados se almacena dentro de FragmentStatePagerAdapter. La instancia de Fragment se vuelve a crear una vez que regrese a un elemento existente y se restaure el estado.

 public static class MyAdapter extends FragmentStatePagerAdapter { public MyAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return NUM_ITEMS; } @Override public Fragment getItem(int position) { return ArrayListFragment.newInstance(position); } } 

Sé que esta es una publicación anterior, pero me encontré con este problema y encontré una buena solución si tus fragmentos de carga. Simplemente, verifique si el usuario está viendo el fragmento o no anulando el setUserVisibleHint (). Después de eso carga los datos.

  @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { getData(1, getBaseUrl(), getLink()); } }