Parece que cuando se utiliza un ViewPager, el oyente onPageSelected no se llama para el primer problema de la misma página que this.ViewPager onPageSeleccionado para la primera página
He cierta lógica que puebla algunos elementos de interfaz de usuario más caras de la página seleccionada en ese momento y esto funciona cuando se cambia la página, pero it doesn't work for the first page.
Si fijo el elemento actual después de que el oyente, la devolución de llamada es despedido de la primera página, pero la vista no se ha inicializado todavía, así que no puede manipularlo:
// Inside PagerAdapter.instantiateItem
ViewHolder vh = new ViewHolder();
cursor.moveToPosition(position);
vh.view = adapter.newView(context, cursor, null);
// Set position as tag so we can retrieve it with findViewByTag
vh.view.setTag(position);
((ViewPager) collection).addView(vh.view,0);
return vh;
// Inside MyActivity.onCreate
pagerAdapter = new SingleMessagePagerAdapter(this, cursor);
pager = (ViewPager)findViewById(R.id.message_pager);
pager.setAdapter(pagerAdapter);
pager.setOnPageSelectedListener(this);
pager.setCurrentItem(selectedItem);
// Inside MyActivity.onPageSelected
// Retrieve tagged view
View view = pager.findViewWithTag(position);
Aquí view
termina siendo nula porque PagerAdapter.instantiateItem
todavía no se ha ejecutado. Así que supongo que mi pregunta es, ¿en qué punto del ciclo de vida de la actividad puedo estar seguro de que ViewPager ha inicializado la vista? Intenté hacer esto dentro de Activity.onAttachedToWindow
y Activity.onResume
, pero parece que ambos se dispararon antes de PagerAdapter.instantiateItem
.
Esto debería funcionar, pero lo que si tiene que desplazarse por una lista de páginas cuyo número no está predefinido? ¿Como una lista de elementos que se obtienen de la web y cada uno de ellos debe mostrarse en cada uno de estos buscapersonas uno por uno? –
defina getCount() en FragmentPagerAdapter dinámicamente o intente habilitar el bucle en ViewPager !! – SSKahani