Làm cách nào để bạn có được số trang hiện tại của ViewPager cho Android?


84

Tôi muốn biết vị trí trang hiện tại của ViewPager. Tôi tạo một bộ điều hợp và đặt bộ điều hợp này thành ViewPager. Bây giờ tôi muốn biết số trang hiện tại hoặc vị trí của chế độ xem hiện tại, vì tôi muốn bắt đầu một số sự kiện bổ sung trên trang cụ thể đó.

Tôi đã sử dụng viewPager.setCurrentItem(1);để thiết lập mục đầu tiên.

Có phương pháp tương tự để lấy trang hiện tại không?

Câu trả lời:


180

trong các gói mới nhất bạn cũng có thể sử dụng

vp.getCurrentItem()

hoặc là

vp là viewPager,

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

bạn phải đặt một trình nghe thay đổi trang cho viewPager của bạn. Không có phương pháp nào trên viewPager để lấy trang hiện tại.

private int currentPage;

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

Cảm ơn bạn rất nhiều..có hoạt động..Bạn đã làm việc trước đây trên ViewPager chưa?
sam_k 14/11/11

@Necronet không, không nên. Lớp PageListener phải là một lớp bên trong, không phải là một lớp lồng nhau.
dcow

Đôi khi tôi gặp trường hợp ngoại lệ con trỏ null ở phần đầu của hình ảnh máy nhắn tin, để có các giải pháp đáng tin cậy hơn, tôi đề xuất điều này, nó hoạt động tốt đối với tôi. stackoverflow.com/a/13831450/2296787
MBH

setOnPageChangeListener()không được dùng nữa, hãy sử dụng addOnPageChangeListener()thay thế.
ZzZombo

47

Có một phương thức object_of_ViewPager.getCurrentItem()trả về vị trí của trang đã xem hiện tại của trang xem


Tôi thực sự đã đăng câu trả lời này đầu tiên @ChuckBoris, vẫn là câu trả lời này dường như đã thu thập được nhiều phiếu bầu hơn và dường như là một sự chứng thực. Lạ là những cách của trang web này :)
devanshu_kaushik

17

Nếu bạn chỉ muốn vị trí, vp.getCurrentItem()sẽ giao nó cho bạn, không cần áp dụng onPageChangeListener () cho mục đích đó.


8

Bạn sẽ tìm ra rằng setOnPageChangeListener không được dùng nữa, hãy sử dụng addOnPageChangeListener, như bên dưới:

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

Đối với vấn đề này Trình nghe Onpagechange là tốt nhất Nhưng nó cũng sẽ có một lỗi nhỏ đó là nó sẽ không phát hiện thời gian bắt đầu thời gian của vị trí thứ 0 Khi bạn thay đổi trang, nó sẽ bắt đầu phát hiện vị trí Trang đã chọn ... Đối với điều này vấn đề tôi đưa ra giải pháp dễ dàng nhất

1. Bạn phải giữ nguyên giá trị vị trí đã chọn rồi sử dụng nó ....
2. Trường hợp 1: Tại vị trí bắt đầu luôn là Zero ....
Trường hợp 2: Giả sử nếu bạn đặt mục hiện tại nghĩa là bạn sẽ đặt giá trị vào duy trì vị trí
3. Sau đó thực hiện hành động của bạn với việc sử dụng duy trì đó trong hoạt động của bạn ...

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 không được dùng nữa. Sử dụng addOnPageChangeListener thay vì setOnPageChangeListener.
Selin

6

getCurrentItem(), không thực sự cung cấp đúng vị trí cho trang đầu tiên và trang cuối cùng mà tôi đã sửa nó bằng cách thêm mã này:

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

Không có bất kỳ phương thức nào getCurrentItem () trong viewpager.i đã kiểm tra API


3
Bạn phải cập nhật gói tương thích trong Trình quản lý SDK Android, sau đó chỉ bạn có được phương pháp đó.
krisDrOid

5

Phương thức setOnPageChangeListener () không được dùng nữa. Thay vào đó, hãy sử dụng addOnPageChangeListener (OnPageChangeListener) .

Bạn có thể sử dụng OnPageChangeListener và nhận vị trí bên trong onPageSelected()phương thức, đây là một ví dụ:

   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) {

        }
    });

Hoặc chỉ sử dụng getCurrentItem () để có được vị trí thực:

viewPager.getCurrentItem();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.