如何在 Fragment 对象中控制 ViewPager 更改页面

Posted

技术标签:

【中文标题】如何在 Fragment 对象中控制 ViewPager 更改页面【英文标题】:How to control ViewPager change page in Fragment object 【发布时间】:2020-06-17 05:04:31 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您可以使用 eventbus 通知 viewpager 到下一页。 实现 toNextPage 函数

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

【讨论】:

谢谢,我使用 EventBus 并成功从 Fragment 向我的 CustomViewPager 发送消息。【参考方案2】:

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

Java:

在你的ViewPager'sActivity 中创建一个函数

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

并从Fragment 调用此函数,并将位置参数传递为

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

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

科特林:

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

Activity 中将 ViewPager 声明为全局变量

lateinit var viewPager : ViewPager

在其中将onCreate()Activity 初始化为

viewPager = findViewById(R.id.viewPager)

并在片段中使用它并将您当前的位置传递为

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

现在,当您的视频结束时,您可以通过Fragment 中的任何一种方式来更改currentItemViewPager

【讨论】:

以上是关于如何在 Fragment 对象中控制 ViewPager 更改页面的主要内容,如果未能解决你的问题,请参考以下文章

ViewPager详解填充Fragment和懒加载

ViewPager详解填充Fragment和懒加载

android ViewPager+Fragment 如何在ViewPager的Activity中获取Fragment中的控件对象

如何在 Fragment 中获取 Google Maps 对象

当当前页面不是第一页时,ViewPager在旋转屏幕后有错误的偏移数据

如何在ViewPager中的各个Fragment间传递数据并刷新Fragment界面