如何从 Activity 调用 ViewPager 片段中的方法?
从 Activity 调用 ViewPager Fragment 方法
在禁用手指滑动的 ViewPager 上下文中,出现了如何在各个 Fragment 中触发数据获取请求的问题使用专用按钮滑动后变得可见。
初始方法
- setUserVisibleHint():最初使用,但在动画播放时导致滞后
- OnPageChangeListener():成功监视页面更改的更好方法。
问题
但是,从 OnPageChangeListener() 内的片段调用 sendGetRequest() 方法导致 NullPointerException。
解决方案
要解决问题并维护片段引用,需要适配器
带有片段引用的 PagerAdapter
引入一个包含对每个片段的引用的 PagerAdapter:
<code class="java">class PagerAdapter extends FragmentPagerAdapter { public Fragment[] fragments; // Instantiate fragments and add to array @Override public Object instantiateItem(ViewGroup container, int position) { Fragment createdFragment = (Fragment) super.instantiateItem(container, position); fragments[position] = createdFragment; return createdFragment; } }</code>
访问片段来自 Activity
然后,在 Activity 中,不要创建新片段,而是使用引用的片段:
<code class="java">viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { Fragment frag = mAdapter.fragments[position]; if (frag != null && frag instanceof FragmentTwo) { ((FragmentTwo)frag).sendGetRequest(); } } });</code>
ViewPager2 和 Kotlin
对于 ViewPager2 和 Kotlin,解决方案类似:
<code class="kotlin">viewPager.registerOnPageChangeCallback( object: ViewPager2.OnPageChangeCallback() { override fun onPageSelected(position: Int) { super.onPageSelected(position) val frag: Fragment = mAdapter.fragments[position] if (frag != null && frag is FragmentTwo) { (frag as FragmentTwo).sendGetRequest() } } } )</code>
注意:如果使用不同的片段类,请考虑使用 sendGetRequest() 方法实现一个接口,并在每个片段都是一个更清洁的解决方案。
以上是如何从 Activity 调用 ViewPager 片段中的方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

2025年的前4个JavaScript框架:React,Angular,Vue,Svelte

如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存?

Spring Boot Snakeyaml 2.0 CVE-2022-1471问题已修复

如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?

如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?
