Android 용 ViewPager의 현재 페이지 번호는 어떻게 얻습니까?


84

의 현재 페이지 위치를 알고 싶습니다 ViewPager. 어댑터를 만들고이 어댑터를 ViewPager. 이제 특정 페이지에서 추가 이벤트를 시작하려고하므로 현재 페이지 번호 또는 현재보기의 위치를 ​​알고 싶습니다.

viewPager.setCurrentItem(1);첫 번째 항목을 설정하는 데 사용 했습니다.

현재 페이지를 가져 오는 유사한 방법이 있습니까?

답변:


180

최신 패키지에서 사용할 수도 있습니다.

vp.getCurrentItem()

또는

vp는 viewPager입니다.

pageListener = new PageListener();
vp.setOnPageChangeListener(pageListener);

viewPager에 페이지 변경 리스너를 넣어야합니다. viewPager에는 현재 페이지를 가져 오는 방법이 없습니다.

private int currentPage;

    private static class PageListener extends SimpleOnPageChangeListener{
            public void onPageSelected(int position) {
                Log.i(TAG, "page selected " + position);
                   currentPage = position;
        }
    }

고마워요 .. 작동합니다 .. 전에 ViewPager에서 일한 적이 있습니까?
sam_k

@Necronet 아니, 안돼. PageListener 클래스는 중첩 클래스가 아닌 내부 클래스 여야합니다.
dcow

호출기 이미지의 시작 부분에 널 포인터 예외가 발생하는 경우가 있습니다.보다 안정적인 솔루션을 제공하기 위해이 기능을 사용하는 것이 좋습니다. stackoverflow.com/a/13831450/2296787
MBH

setOnPageChangeListener()더 이상 사용되지 않습니다 addOnPageChangeListener(). 대신 사용하십시오.
ZzZombo

47

object_of_ViewPager.getCurrentItem()뷰 페이저의 현재 조회 된 페이지의 위치를 ​​반환 하는 메소드 가 있습니다.


나는 실제로이 답변을 먼저 @ChuckBoris에 게시했지만 여전히 이것은 더 많은 투표와지지를 얻은 것으로 보입니다. 이상한 :이 사이트의 방법입니다
devanshu_kaushik

17

위치 만 원하는 경우 vp.getCurrentItem()해당 목적으로 만 onPageChangeListener ()를 적용 할 필요가 없습니다.


8

setOnPageChangeListener가 더 이상 사용되지 않음을 확인하고 아래와 같이 addOnPageChangeListener를 사용합니다.

ViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
       if(position == 1){  // if you want the second page, for example
           //Your code here
       }
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
});

7

이 문제의 경우 Onpagechange listener가 가장 좋은 방법이지만 0 번째 위치의 시작 시간을 감지하지 못하는 작은 실수도 있습니다. 페이지를 변경하면 Page 선택한 위치를 감지하기 시작합니다. 내가 가장 쉬운 해결책을 찾는 문제

1. 선택한 위치 값을 유지하고 사용해야합니다 ....
2. 사례 1 : 위치의 시작은 항상 0입니다 ....
사례 2 : 현재 항목을 설정하면 해당 항목을 설정한다는 의미라고 가정합니다. 유지 위치에 대한 가치
3. 그런 다음 활동에서 유지 관리를 사용하여 행동을하십시오 ...

Public int maintain=0;
myViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i2) {
             //Toast.makeText(MyActivity.this, i+"  Is Selected  "+data.size(), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onPageSelected( int i) {
          // here you will get the position of selected page
            maintain = i;


        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });


updateButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            Toast.makeText(MyActivity.this, i+"  Is Selected  "+data.size(), Toast.LENGTH_SHORT).show();
            data.set(maintain, "Replaced "+maintain);         
            myViewPager.getAdapter().notifyDataSetChanged();
        }
    });

1
setOnPageChangeListener는 더 이상 사용되지 않습니다. setOnPageChangeListener 대신 addOnPageChangeListener를 사용하십시오.
Selin

6

getCurrentItem(), 실제로 첫 번째 및 마지막 페이지에 올바른 위치를 제공하지 않습니다.이 코드를 추가하여 수정했습니다.

public void CalcPostion() {    
    current = viewPager.getCurrentItem();

    if ((last == current) && (current != 1) && (current != 0)) {
        current = current + 1;
        viewPager.setCurrentItem(current);
    }
    if ((last == 1) && (current == 1)) {
        last = 0;
        current = 0;
    }
    display();
    last = current;
}

5

viewpager.i에는 이미 API를 확인한 getCurrentItem () 메소드가 없습니다.


3
Android SDK Manager에서 호환성 패키지를 업데이트해야합니다. 그러면 해당 메서드 만 얻을 수 있습니다.
krisDrOid 2012

5

setOnPageChangeListener () 메소드는 추천된다. 사용 addOnPageChangeListener (OnPageChangeListener) 대신.

OnPageChangeListener 를 사용 하고 onPageSelected()메서드 내부의 위치를 가져올 수 있습니다 . 다음은 예입니다.

   viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            Log.d(TAG, "my position is : " + position); 
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

또는 getCurrentItem () 을 사용 하여 실제 위치를 가져옵니다.

viewPager.getCurrentItem();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.