ViewPager에서 프로그래밍 방식으로 다음보기를 표시하는 방법은 무엇입니까?


107

ViewPager를 만들었고 모든 것이 잘 작동하지만 ViewPager 내부를 탐색하는 데 사용할 수있는 ViewPager 외부에 이전 다음 버튼을 갖고 싶습니다. 수동으로 스 와이프하지 않고 ViewPager의 다음 항목으로 이동하려면 어떻게해야합니까?


39
이 작동하지 않습니다 viewpager.setCurrentItem (int index); ?
blessenm

이 질문이 중복이라고 생각합니다.
Vaibhav Mishra 2011 년

답변:


154

blessenm이 대답했듯이 viewpager.setCurrentItem(int index)갈 길입니다.


5
불행히도 사용자가 수동으로 스 와이프 할 때와 setCurrentItem을 사용하여 점프 할 때 다른 동작이 발생합니다. 통화 순서가 바뀝니다. 스 와이프하면 먼저 OnPageChangeListener # onPageSelected를 호출 한 다음 조각에서 setUserVisibleHint를 호출합니다. setCurrentItem을 사용하는 경우 먼저 조각에서 setUserVisibleHint를 호출 한 다음 OnPageChangeListener # onPageSelected를 호출합니다. 이것은 제 경우에는 정말 문제입니다. .
AgentKnopf 2014

내가 활동의 다음보기를 표시 할 경우 어떻게 @Vaibhav
Prabs

@AgentKnopf이 문제에 대한 해결책을 찾았습니까? 나는 또한이 이상한 동작을 보았지만 프로그래밍 방식으로 다음 / 이전 조각으로 전환 할 때 규칙적인 스 와이프의 흐름을 유지하는 방법을 찾을 수 없습니다.
Gil

@Gil 나는 두려워하지 않는다-나는 현재보기의 프로그래밍 방식 변경을 제거하고 스 와이프를 허용했다. 그러나 나중에 구현을 완전히 변경했기 때문에 더 이상이 문제를 추구하지 않았습니다.
AgentKnopf

107

완전성을위한 완전한 구현 :

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)그것의 원인을 알고
토마스 울프

2
@Sagar는 xml에서 버튼의 클릭 리스너를 설정했을 수 있습니다.이 경우 필요하지 않더라도 뷰 매개 변수가 있어야합니다.
Ashish Tanna

페이지 스 와이프 애니메이션이 나오지 않습니까?
Lavekush Agrawal

18

가장 쉬운 방법은 다음과 같습니다.

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

이것은에서 작동하지 않습니다 ViewPager2.
Micer

0

나는 그것을 더 잘 고친다, 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);
        }
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.