InfiniteViewPager freezes using setCurrentItem () method

I use this code to create an InfiniteViewPager:

pAdapter = new InfinitePagerAdapter(new MyPagerAdapter()); InfinitivePAdapter = (InfiniteViewPager) findViewById(R.id.pager); InfinitivePAdapter.setAdapter(pAdapter); 

There seems to be something wrong with the setCurrentItem () function.

The program freezes when I try to call the setCurrentItem () function, but not every time. A program freezes only when: The setCurrentItem () element is lower and is called from another method (in my case, from 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 } }); 

However, the program works fine when: The item is larger than the previous one:

  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 } }); 

or setCurrentItem (3) is called one after another, although the element is smaller than the previous one:

 InfinitivePAdapter.setCurrentItem(7); InfinitivePAdapter.setCurrentItem(5); 

More precisely, the program freezes in the InfiniteViewPager class on this line:

 @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 } 

I got my InfiniteViewPager from https://github.com/antonyt/InfiniteViewPager

You can download the full code here: https://drive.google.com/folderview?id=0B3LJrVAKNLR1OG8yeERyQ2ZySU0&usp=sharing

Thanks!

+7
android android-viewpager freeze
source share
1 answer

I get it. In the InfinitePagerAdapter class, I simply changed the return value of the getCount () method.

 @Override public int getCount() { return Integer.MAX_VALUE; } 

Integer.MAX_VALUE was too big, so reduce it to 3000:

 return 3000;//Or something similar 

The problem was in the ViewPager class, where on line 1029 the for loop never completed:

 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 
+12
source share

All Articles