首页 > Java > java教程 > 正文

如何从 ViewPager OnPageChangeListener 调用 Fragment 方法而不出现 NullPointerException?

Patricia Arquette
发布: 2024-11-03 09:08:29
原创
537 人浏览过

How to Call a Fragment Method from a ViewPager OnPageChangeListener Without a NullPointerException?

从 Activity 访问 ViewPager Fragment 方法

在您的场景中,您有一个具有多个 Fragment 实例的 ViewPager,并且您想要执行 GET请求并在 Fragment 滑动后可见时显示检索到的数据。

第一种方法:setUserVisibleHint

使用 setUserVisibleHint 并不理想,因为它会在以下情况立即触发请求Fragment 变得可见,中断了平滑的滑动动画。

第二种方法:OnPageChangeListener

OnPageChangeListener 提供了更合适的方法。但是,当您尝试在 onPageScrollStateChanged 方法中调用 sendGetRequest() 时,会遇到 NullPointerException。

解决方案

发生 NullPointerException 是因为您尝试使用来自Fragment 内的 ViewPager 的 OnPageChangeListener。本例中的上下文是 MainActivity,它不适合 Fragment 的操作。

要解决此问题,您需要传递对 Fragment 上下文的引用。下面是修改后的 OnPageChangeListener:

<code class="java">viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    int currentPosition = 0;

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }

    @Override
    public void onPageSelected(int position) {
        currentPosition = position;
    }

    @Override
    public void onPageScrollStateChanged(int state) {
        if (state == ViewPager.SCROLL_STATE_IDLE && currentPosition != 0) {
            try {
                Fragment fragment = mAdapter.fragments[currentPosition];
                if (fragment != null && fragment instanceof FragmentTwo) {
                    ((FragmentTwo) fragment).sendGetRequest();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
});</code>
登录后复制

在这段代码中,我们使用 FragmentAdapter 的fragments 数组来获取对当前位置的 Fragment 的引用。然后,我们将 Fragment 转换为适当的类型(在本例中为 FragmentTwo)并调用其 sendGetRequest() 方法。

使用此方法,您可以触发 GET 请求并在所需的 Fragment 中显示获取的数据滑动动画顺利完成。

以上是如何从 ViewPager OnPageChangeListener 调用 Fragment 方法而不出现 NullPointerException?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!