I am using this code to create InfiniteViewPager:
pAdapter = new InfinitePagerAdapter(new MyPagerAdapter());
InfinitivePAdapter = (InfiniteViewPager) findViewById(R.id.pager);
InfinitivePAdapter.setAdapter(pAdapter);
There seems to be something wrong with setCurrentItem() function.
The program freezes when I try call setCurrentItem() function, but not everytime. The program freezes only when: The setCurrentItem()'s item is lower and it is called from different 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 program seems to be working normal when: Item is bigger then 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 the setCurrentItem(3) is called one after another even though the item is smaller than previous one:
InfinitivePAdapter.setCurrentItem(7);
InfinitivePAdapter.setCurrentItem(5);
More precisely program freezes in 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 full code here:https://drive.google.com/folderview?id=0B3LJrVAKNLR1OG8yeERyQ2ZySU0&usp=sharing
Thanks!
I figured it out. In the InfinitePagerAdapter class I just changed the return value of getCount() method.
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
Integer.MAX_VALUE was too big of a value so scale it down to 3000:
return 3000;//Or something similar
The problem was in the ViewPager class where on line 1029 the for loop would never finished:
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With