【问题标题】:How to programmatically show next view in ViewPager?如何以编程方式在 ViewPager 中显示下一个视图?
【发布时间】:2011-12-09 18:12:53
【问题描述】:

我创建了一个 ViewPager,一切正常,但是我希望在 ViewPager 之外有一个上一个下一个按钮,可用于在 ViewPager 内部导航。如何在不手动滑动的情况下转到 ViewPager 上的下一个项目?

【问题讨论】:

标签: android android-viewpager


【解决方案1】:

正如 blessenm 回答 viewpager.setCurrentItem(int index) 是要走的路。

【讨论】:

  • 不幸的是,当用户手动滑动和使用 setCurrentItem 跳转时,我确实得到了不同的行为。调用顺序颠倒了。当我滑动时,它首先调用 OnPageChangeListener#onPageSelected,然后在片段中调用 setUserVisibleHint。如果我使用 setCurrentItem,它首先在片段中调用 setUserVisibleHint,然后调用 OnPageChangeListener#onPageSelected,这在我的情况下确实是一个问题:/ 所以我希望找到一种方法来保持自然行为但仍然以编程方式移动到另一个页面.
  • @Vaibhav 如果我想显示下一个活动视图怎么办
  • @AgentKnopf 您是否设法找到解决此问题的方法?我也看到了这种奇怪的行为,但是当我以编程方式切换到下一个/上一个片段时,找不到保持常规滑动流程的方法。
  • @Gil 恐怕不会 - 我删除了当前视图的编程更改,只允许滑动。但是我们后来完全改变了实现,所以我没有进一步研究这个问题。
【解决方案2】:

一个完整的实现只是为了完整性:

public void MoveNext(View view) {
    //it doesn't matter if you're already in the last item
    pager.setCurrentItem(pager.getCurrentItem() + 1);
}

public void MovePrevious(View view) {
    //it doesn't matter if you're already in the first item
    pager.setCurrentItem(pager.getCurrentItem() - 1);
}

【讨论】:

  • 您可能需要它。例如,如果更改是由点击触发的,您可以使用(nextBt.getId() == view.id) 了解导致它的原因
  • @Sagar他可能已经在xml中设置了按钮的点击监听,在这种情况下你必须有view参数,即使你不需要它。
  • 页面滑动动画不来了?
【解决方案3】:

最简单的方法是:

nextButton.setOnClickListener { pager.arrowScroll(View.FOCUS_RIGHT) }
prevButton.setOnClickListener { pager.arrowScroll(View.FOCUS_LEFT) }

【讨论】:

    【解决方案4】:

    我修复它更好,ty Androiderson。

      private void MoveNextTopSlideShow(View view)
        {
            if (_viewPager_TopImageSlide.CurrentItem == _viewPager_TopImageSlide.ChildCount)
            {
                if (_viewPager_TopImageSlide.ChildCount > 0)
                {
                    _viewPager_TopImageSlide.SetCurrentItem(0,true);
                }
            }
            else
            {
                //it doesn't matter if you're already in the last item
                _viewPager_TopImageSlide.SetCurrentItem(_viewPager_TopImageSlide.CurrentItem + 1, true);
            }
        }
    
        private void MovePreviousTopSlideShow(View view)
        {
            if (_viewPager_TopImageSlide.CurrentItem == 0)
            {
                if (_viewPager_TopImageSlide.ChildCount > 0)
                {
                    _viewPager_TopImageSlide.SetCurrentItem(_viewPager_TopImageSlide.ChildCount-1, true);
                }
            }
            else
            {
                //it doesn't matter if you're already in the first item
                _viewPager_TopImageSlide.SetCurrentItem(_viewPager_TopImageSlide.CurrentItem - 1, true);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多