android android-viewpager freeze

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!