问题
I got a ViewPager
which holds Fragment
s via FragmentStatePagerAdapter
. Let's say the pager initially holds the following pages (Fragment
s):
A - B - C - D
When the user swipes, he can move from A
to B
, B
to C
etc.
But there are cases when the user changes some options on the A
page, he can move not to B
, but C
:
A - C - D
Then the user goes back to A
, modifies something and that re-enables B
:
A - B - C - D
How can i achieve this very dynamic behavior? I cannot add Fragment
s any time when the user changes something and then re-populate the ViewPager
, because it's slow and breaks the flow.
回答1:
We too had the same situation, and we solved this issue by maintaining a boolean ArrayList.The pages here are fragments. On the Fragment, we had written an interface to update the ArrayList.This interface is implemented on the parent activity.On every swipe of the ViewPager we are retrieving the boolean ArrayList. On ViewPager, in setOnPageChangeListener we overrided the onPageSelected.
And here is the piece of code:
pageIndicator.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
pagesPageBreakInfoList = activityContext.getBooleanList();
currentPageNumber = position;
if (!pagesPageBreakInfoList.get(position)) {
if (currentPageNumber > previouspagenumber) {
previouspagenumber = currentPageNumber;
if (numberofSubmodule == (position + 1)) {
viewPager.setCurrentItem(position - 1);
} else {
viewPager.setCurrentItem(position + 1);
}
} else {
previouspagenumber = currentPageNumber;
viewPager.setCurrentItem(position - 1);
}
} else {
previouspagenumber = currentPageNumber;
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
来源:https://stackoverflow.com/questions/19861445/dynamically-skip-pages-in-viewpager