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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top