Cómo cargar datos de fragmentos sólo cuando se hace clic en su pestaña en PagerSlidingTabStrip

Estoy usando PagerSlidingTabStrip en mi proyecto y estoy mostrando datos en fragmentos. Es una gran biblioteca que funciona muy bien. Cada fragmento consiste en conferencias de un erudito que se cargan de un servicio de la tela. El código para acceder al servicio web está en el método onCreateView del fragmento. Actualmente, todos los datos del fragmento se cargan al mismo tiempo cuando se agregan a ViewPager . Me preguntaba si hay alguna forma de cargar los datos del fragmento sólo cuando un usuario hace clic / desliza a una pestaña específica. No todo a la vez.

El código actual es bastante estándar, tomé la ayuda del ejemplo proporcionado [solución androide]. 1

Pager Adapter es el siguiente:

 public class ScholarDetailPagerAdapter extends FragmentPagerAdapter { private final String[] TITLES = { "Scholar Info", "Lectures"}; Scholar _scholar; public ScholarDetailPagerAdapter(FragmentManager fm, Scholar scholar) { super(fm); _scholar = scholar; } @Override public CharSequence getPageTitle(int position) { return TITLES[position]; } @Override public Fragment getItem(int arg0) { if(arg0 == 0) return ScholarsInfoFragment.netInstance(_scholar.Name, _scholar.Information, _scholar.ThumbnailUrl); else return ScholarLecturesFragment.newInstance(_scholar.ScholarId); } @Override public int getCount() { return TITLES.length; } } 

Devuelve DOS fragmentos, Info y Lectures. El fragmento de las conferencias llama a un servicio web para obtener conferencias de un erudito.

El código de actividad es:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // set the Above View setContentView(R.layout.tabbed_view); Scholar scholar = getScholar(getIntent()); _tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs); _pager = (ViewPager) findViewById(R.id.pager); _adapter = new ScholarDetailPagerAdapter(getSupportFragmentManager(), scholar); _pager.setAdapter(_adapter); final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources() .getDisplayMetrics()); _pager.setPageMargin(pageMargin); _tabs.setViewPager(_pager); } 

He intentado agregar _tabs.setOnPageChangeListener(this); Y terminé teniendo onPageSelected(int arg0) en mi actividad también. Pensé que sería fácil ahora. Luego modifiqué public Fragment getItem(int arg0) en ScholarDetailPagerAdapter y ScholarDetailPagerAdapter null lugar de devolver dos fragmentos. Pero eso generó una excepción. Pensé que sería hacer visiones vacías en buscapersonas .. pero por supuesto que estaba equivocado.

Para asegurarse de que Fragmento carga datos cuando se hace clic en su respectiva pestaña y es visible, también he intentado invalidar sus siguientes eventos y escribí la llamada de carga de datos en ellos:

  1. onResume() No funciona. Todavía carga datos cuando se agrega en la actividad

  2. Trató de reemplazar onHiddenChanged

     @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if(!hidden){ loadLectures(); } 

    }

Esto no funcionó también. No hay datos cargados como si este evento no se disparara en absoluto.

¿Cómo puedo hacer eso? Simplemente quiero cargar un fragmento cuando el usuario hace clic en una pestaña.

Gracias por adelantado

Podría anular el evento setUserVisibleHint del fragmento para saber si es visible para el usuario y luego cargar sus datos. Algo como lo siguiente:

 boolean _areLecturesLoaded = false; @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser && !_areLecturesLoaded ) { loadLectures(); _areLecturesLoaded = true; } } 
 private boolean isLoaded =false,isVisibleToUser; @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); this.isVisibleToUser=isVisibleToUser; if(isVisibleToUser && isAdded() ){ loadData(); isLoaded =true; } } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { if(isVisibleToUser && (!isLoaded)){ loadData(); isLoaded=true; } } 
  • Pager de Android Pestaña deslizante con iconos
  • PagerSlidingTabStrip que fija anchura de horizonalscrollview fijada
  • Tabulaciones de SlidingTabLayout que no se pueden hacer clic
  • PagerSlidingTabStrip cambiar la fuente de los títulos
  • Indicador de pestaña personalizada (con la flecha hacia abajo como indicador)
  • Añadir iconos a SlidingTabLayout en lugar de texto
  • Android ViewPager con iconos
  • PagerSlidingTabStrip: Cómo actualizar fragmento interno Listview en la ficha actual en tiempo de ejecución y detener los datos de carga para la siguiente pestaña
  • Importación de la biblioteca de Facebook en Android Studio: No se pudo encontrar la propiedad 'ANDROID_BUILD_SDK_VERSION'
  • ¿Es posible modificar el código fuente del archivo de biblioteca en Android Studio desde la dependencia de Gradle
  • Diseño de pestañas deslizantes para idiomas de derecha a izquierda
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.