Làm cách nào để hiển thị chế độ xem tiếp theo theo chương trình trong ViewPager?


107

Tôi đã tạo một ViewPager và mọi thứ đều hoạt động tốt, tuy nhiên tôi muốn có một nút tiếp theo trước đó bên ngoài ViewPager có thể được sử dụng để điều hướng bên trong ViewPager. Làm cách nào để chuyển đến Mục tiếp theo trên ViewPager mà không cần vuốt theo cách thủ công?


39
Điều này không hoạt động viewpager.setCurrentItem (int index); ?
Blessenm

nó đã làm, tôi cho rằng câu hỏi này là một bản sao.
Vaibhav Mishra

1
Có thể trùng lặp về Cách thay đổi trang của ViewPager?
mmd1080

Câu trả lời:


154

Như Blessenm đã trả lời viewpager.setCurrentItem(int index)là con đường để đi.


5
Thật không may, tôi nhận được các hành vi khác nhau, khi người dùng vuốt theo cách thủ công và khi tôi nhảy bằng setCurrentItem. Thứ tự các cuộc gọi bị đảo ngược. Khi tôi vuốt, đầu tiên nó gọi OnPageChangeListener # onPageSelected và sau đó nó gọi setUserVbrokenHint trong các phân đoạn. Nếu tôi sử dụng setCurrentItem, trước tiên nó gọi setUserVnableHint trong các đoạn và sau đó nó gọi OnPageChangeListener # onPageSelected, đây thực sự là một vấn đề trong trường hợp của tôi: / vì vậy tôi đã hy vọng tìm ra cách để giữ hành vi tự nhiên nhưng vẫn chuyển sang trang khác theo chương trình .
AgentKnopf

@Vaibhav gì nếu tôi muốn thể hiện quan điểm tiếp theo của hoạt động
Prabs

@AgentKnopf Bạn đã tìm ra giải pháp cho vấn đề này chưa? Tôi cũng thấy hành vi kỳ lạ này nhưng không thể tìm ra cách để giữ luồng vuốt thông thường khi tôi chuyển sang phân đoạn tiếp theo / trước theo chương trình.
Gil

@Gil Tôi e rằng không - tôi đã loại bỏ sự thay đổi theo chương trình của chế độ xem hiện tại và chỉ cho phép vuốt. Tuy nhiên, chúng tôi đã thay đổi hoàn toàn cách triển khai sau đó nên tôi không theo đuổi vấn đề này nữa.
AgentKnopf

107

Một triển khai hoàn chỉnh chỉ để hoàn thiện:

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);
}

Bạn có thể cần nó. Ví dụ, nếu thay đổi được kích hoạt bởi một nhấp chuột, bạn có thể sử dụng (nextBt.getId() == view.id)để biết những gì gây ra nó
Tomas Wolf

2
@Sagar, anh ta có thể đã đặt trình nghe nhấp chuột của nút trong xml, trong trường hợp đó, bạn phải có tham số chế độ xem, ngay cả khi bạn không cần.
Ashish Tanna

hoạt ảnh vuốt trang không đến?
Lavekush Agrawal

18

Cách dễ nhất là:

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

Lưu ý rằng điều này không hoạt động với ViewPager2.
Micer

0

tôi sửa nó Tốt hơn, 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);
        }
    }
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.