如何在 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's
Activity 中创建一个函数
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
中的任何一种方式来更改currentItem
的ViewPager
。
【讨论】:
以上是关于如何在 Fragment 对象中控制 ViewPager 更改页面的主要内容,如果未能解决你的问题,请参考以下文章
android ViewPager+Fragment 如何在ViewPager的Activity中获取Fragment中的控件对象
如何在 Fragment 中获取 Google Maps 对象