Fragment对象中如何控制ViewPager换页

How to control ViewPager change page in Fragment object

我用一些片段写了一个 ViewPager。在片段中,有VideoView。一开始,第一个VideoView会自动播放,当第一个VideoView结束后,我想改变VideoView的页面,所以我想在Fragment中调用setCurrentItem。这可能吗?

由于您没有提到您使用的语言,我将为 Java 和 Kotlin 回答。

  • Java:

    ViewPager's Activity 中创建一个函数作为

    public void changeViewPagerPostition(int position) { 
    viewPager.setCurrentItem(position); 
    }
    

    然后从 Fragment 调用此函数,将 postition 参数作为

    传递
    ((YourActivity) getActivity()).changeViewPagerPostition(yourPostition);
    //Remember first item is at 0th postition and so on.
    

    您还可以在 Activity 中将 ViewPager 声明为 public 静态,并且可以在 Fragment 中直接访问 ViewPager,但这不是首选方式。

  • 科特林:

    在科特林中,我相信这有点容易,虽然你可以使用与 Java 完全相同的方式,但我使用这种方式,因为我也使用 ViewPager 来做更多的事情:

    在您的 Activity 中将 ViewPager 声明为全局变量

    lateinit var viewPager : ViewPager
    

    在里面初始化ActivityonCreate()

    viewPager = findViewById(R.id.viewPager)
    

    并在片段中使用它并将您当前的职位作为

    传递
    (activity as YourActivity?)!!.setCurrentItem(yourPosition)
    

现在,当您的视频结束时,您可以在 Fragment 中调用这些方法中的任何一种来更改 ViewPagercurrentItem

您可以使用 eventbus 通知 viewpager 到下一页。 实施 toNextPage func

void toNextPage() {
    if (viewPager.getAdapter().getCount() >= viewPager.getCurrentItem() + 1) {
        viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
    } else {
        Toast.makeText(this, "is end", Toast.LENGTH_SHORT).show();
    }
}