为啥 viewPager 的 setCurrentItem() 适用于下一页而不适用于上一页?

Posted

技术标签:

【中文标题】为啥 viewPager 的 setCurrentItem() 适用于下一页而不适用于上一页?【英文标题】:why setCurrentItem() of viewPager works for next page and not for previous page?为什么 viewPager 的 setCurrentItem() 适用于下一页而不适用于上一页? 【发布时间】:2016-10-14 12:38:05 【问题描述】:

我正在使用 android Studio 的选项卡式活动。

我正在滑动页面之间移动,但我添加了 2 个视图以通过 onclick 方法移动下一个和上一个视图,但仅返回到下一个是行不通的。

     nextAbitudini.setOnClickListener(new View.OnClickListener() 
                    @Override
                    public void onClick(View view) 
                        //it works
                        mViewPager.setCurrentItem(getArguments().getInt(ARG_SECTION_NUMBER));
                    
                );

     backAbitudini.setOnClickListener(new View.OnClickListener() 
                    @Override
                    public void onClick(View view) 
                       //it doesn't work
                       mViewPager.setCurrentItem(getArguments().getInt(ARG_SECTION_NUMBER)-1);
                    
                );

我正在使用 FragmentPagerAdapter。 它可以向后滑动。

我将 onClick 方法放在 onCreateview 中。

【问题讨论】:

您是否更改了 ViewPager 的 onPageSelected 上的 ARG_SECTION_NUMBER? 是的,我也尝试设置修复号 【参考方案1】:

参考Tabbed Activity,看看片段初始化时的节号。 (sectionNumber = position+1)。

    @Override
    public Fragment getItem(int position) 
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
        return PlaceholderFragment.newInstance(position + 1);
    

因此,ARG_SECTION_NUMBER-1 指的是当前片段的位置,ARG_SECTION_NUMBER-2 指的是上一个,ARG_SECTION_NUMBER 指的是下一个。

因此,您的代码应该是这样的:

 nextAbitudini.setOnClickListener(new View.OnClickListener() 
                @Override
                public void onClick(View view) 
                    //it works
                    mViewPager.setCurrentItem(getArguments().getInt(ARG_SECTION_NUMBER));
                
            );

 backAbitudini.setOnClickListener(new View.OnClickListener() 
                @Override
                public void onClick(View view) 
                   //it doesn't work
                   mViewPager.setCurrentItem(getArguments().getInt(ARG_SECTION_NUMBER)-2);
                
            );

【讨论】:

您还应该注意,您应该将下一个和后退按钮放在包含ViewPagerActivity 中,而不是每个Fragment 中。

以上是关于为啥 viewPager 的 setCurrentItem() 适用于下一页而不适用于上一页?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 ViewPager 向左滚动时颜色过渡动画错误?

为啥 ViewPager 无限循环不起作用?

为啥Android ViewPager2 类是final?

为啥 ViewPager 高度 match_parent 不起作用?

为啥android中的ViewPager只能在V4 Support库中使用

为啥这些随机标记出现在每个 recyclerview 和 viewpager 项目中?