简体   繁体   English

在ViewPager中动态跳过页面

[英]Dynamically skip pages in ViewPager

I got a ViewPager which holds Fragment s via FragmentStatePagerAdapter . 我有一个ViewPager持有Fragment通过S FragmentStatePagerAdapter Let's say the pager initially holds the following pages ( Fragment s): 让我们说寻呼机最初拥有以下页面( Fragment ):

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移动到BB移动到C等。但是有些情况下,当用户更改A页面上的某些选项时,他可以不移动到B ,而是C

A - C - D

Then the user goes back to A , modifies something and that re-enables B : 然后用户返回A ,修改一些东西并重新启用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. 当用户更改某些内容然后重新填充ViewPager ,我无法添加Fragment ,因为它很慢并且会中断流程。

We too had the same situation, and we solved this issue by maintaining a boolean ArrayList.The pages here are fragments. 我们也有相同的情况,我们通过维护布尔ArrayList来解决这个问题。这里的页面是片段。 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. 在Fragment上,我们编写了一个接口来更新ArrayList。这个接口是在父活动上实现的。在ViewPager的每次滑动中,我们都在检索布尔ArrayList。 On ViewPager, in setOnPageChangeListener we overrided the onPageSelected. 在ViewPager上,在setOnPageChangeListener中我们覆盖了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
    }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM