android - InfiniteViewPager se congela en el método setCurrentItem()
android-viewpager freeze (1)
Me lo imaginé. En la clase InfinitePagerAdapter acabo de cambiar el valor de retorno del método getCount ().
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
Integer.MAX_VALUE era demasiado grande, así que reduzca a 3000:
return 3000;//Or something similar
El problema estaba en la clase ViewPager donde en la línea 1029 el bucle for nunca terminaría:
for (int pos = mCurItem + 1; pos < N; pos++)
//N is the return Integer.MAX_VALUE and the mCurItem is the item set in setCurrentItem() method
Estoy usando este código para crear InfiniteViewPager:
pAdapter = new InfinitePagerAdapter(new MyPagerAdapter());
InfinitivePAdapter = (InfiniteViewPager) findViewById(R.id.pager);
InfinitivePAdapter.setAdapter(pAdapter);
Parece que hay algo mal con la función setCurrentItem ().
El programa se congela cuando intento llamar a la función setCurrentItem (), pero no siempre. El programa se congela solo cuando: El elemento setCurrentItem () es más bajo y se llama desde un método diferente (en mi caso desde onClickListener).
InfinitivePAdapter.setCurrentItem(7);//item is set on 7
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
InfinitivePAdapter.setCurrentItem(5);//when button is pressed it is set to 5
}
});
Sin embargo, el programa parece funcionar normalmente cuando: el artículo es más grande que el anterior:
InfinitivePAdapter.setCurrentItem(3);//item is set on 3
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
InfinitivePAdapter.setCurrentItem(12);//when button is pressed it is set to 12
}
});
o setCurrentItem (3) se llama uno después de otro aunque el artículo es más pequeño que el anterior:
InfinitivePAdapter.setCurrentItem(7);
InfinitivePAdapter.setCurrentItem(5);
Más precisamente, el programa se congela en la clase InfiniteViewPager en esta línea:
@Override
public void setCurrentItem(int item) {
// offset the current item to ensure there is space to scroll
item = getOffsetAmount() + (item % getAdapter().getCount());
super.setCurrentItem(item);//<---HERE
}
Obtuve mi InfiniteViewPager desde https://github.com/antonyt/InfiniteViewPager
Puede descargar el código completo aquí: https://drive.google.com/folderview?id=0B3LJrVAKNLR1OG8yeERyQ2ZySU0&usp=sharing
¡Gracias!