首页  >  文章  >  Java  >  如何从 Activity 调用 ViewPager 片段中的方法?

如何从 Activity 调用 ViewPager 片段中的方法?

DDD
DDD原创
2024-11-03 09:13:02915浏览

How to Call Methods in ViewPager Fragments from Activity?

从 Activity 调用 ViewPager Fragment 方法

在禁用手指滑动的 ViewPager 上下文中,出现了如何在各个 Fragment 中触发数据获取请求的问题使用专用按钮滑动后变得可见。

初始方法

  1. setUserVisibleHint():最初使用,但在动画播放时导致滞后
  2. 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 &amp;&amp; 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 &amp;&amp; frag is FragmentTwo) {
                (frag as FragmentTwo).sendGetRequest()
            }
        }
    }
)</code>

注意:如果使用不同的片段类,请考虑使用 sendGetRequest() 方法实现一个接口,并在每个片段都是一个更清洁的解决方案。

以上是如何从 Activity 调用 ViewPager 片段中的方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn