在禁用手指滑动的 ViewPager 上下文中,出现了如何在各个 Fragment 中触发数据获取请求的问题使用专用按钮滑动后变得可见。
初始方法
问题
但是,从 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中文网其他相关文章!