with viewpager showing practice pagetransformer not fragments example best android android-viewpager

showing - viewpager android example



¿Cómo puedo desactivar la precarga en un viewpager? (3)

¿Cómo puedo deshabilitar la precarga en un ViewPager?

no es posible. ViewPager precarga siempre al menos 1 página. Si no desea este comportamiento, no debe usar ViewPager. Podrías usar, por ejemplo, un RecyclerView

Vieja respuesta

tienes que llamar a setOffscreenPageLimit(1)

Desde el doc

Establezca el número de páginas que deben conservarse en cualquier lado de la página actual en la jerarquía de vistas en estado inactivo. Las páginas más allá de este límite se recrearán desde el adaptador cuando sea necesario.

¿Cómo puedo desactivar la precarga en un viewpager?

Tengo un viewpager con 3 páginas. Así que no quiero cargar la página siguiente y la página anterior. ¿Cómo puedo deshabilitar ese comportamiento?


Bueno, parece que es un poco más complicado de lo que uno podría pensar. El código a continuación es una clase abstracta que debe ser implementada por su fragmento. De hecho requiere lo siguiente:

  1. Reemplace onActivityCreated con lazyOnActivityCreated .
  2. Implemente el método lazyLoadData que carga los datos para la pestaña.
  3. Después de haber cargado los datos o por cualquier motivo, ha cambiado la llamada de datos activa setTabDataId .

Sé que suena un poco complicado, pero funciona cada vez y definitivamente funcionará cuando setUserHint no sea bueno.

Aquí está la clase abstracta:

public abstract class LazyFetchTabFragment extends AbstractTabFragment { private String tabDataId; private String activeTabDataId; private boolean isActive = false; private boolean isCreated = false; @Override public void onStop(){ super.onStop(); isCreated = false; activeTabDataId = null; } /** * An abstract method that should be called instead of {@link android.app.Fragment#onActivityCreated(Bundle)}. */ public abstract void lazyOnActivityCreated() throws Exception; public abstract void lazyLoadData() throws Exception; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); try { lazyOnActivityCreated(); isCreated = true; loadData(); } catch (Exception e) { Log.e(this.getClass().getCanonicalName() + " - " + Thread.currentThread().getStackTrace()[2].getMethodName(), e.toString()); } } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); // When changing tabs the spinner setOnItemSelectedListener is not called, // so use code below to trigger loading data. isActive = isVisibleToUser; loadData(); } private void loadData(boolean force) { if (isActive && isCreated && tabDataId != null && (force || (activeTabDataId == null || !activeTabDataId.equals(tabDataId)))) try { lazyLoadData(); activeTabDataId = tabDataId; } catch (Exception ex){ Log.e(this.getClass().getCanonicalName() + " - " + Thread.currentThread().getStackTrace()[2].getMethodName(), ex.toString()); } } public void setTabDataId(String tabDataId) { this.tabDataId = tabDataId; }

¡Buena suerte!


Modifico el código fuente de ViewPager

private static final int DEFAULT_OFFSCREEN_PAGES = 0;

Puede encontrar la fuente en ViewPager sobre setOffscreenPageLimit

public void setOffscreenPageLimit(int limit) { if (limit < DEFAULT_OFFSCREEN_PAGES) { Log.w(TAG, "Requested offscreen page limit " + limit + " too small; defaulting to " + DEFAULT_OFFSCREEN_PAGES); limit = DEFAULT_OFFSCREEN_PAGES; } if (limit != mOffscreenPageLimit) { mOffscreenPageLimit = limit; populate(); } }