首頁  >  文章  >  Java  >  如何從 Activity 呼叫 ViewPager 片段中的方法?

如何從 Activity 呼叫 ViewPager 片段中的方法?

DDD
DDD原創
2024-11-03 09:13:02858瀏覽

How to Call Methods in ViewPager Fragments from Activity?

從Activity 呼叫ViewPager Fragment 方法

在禁用手指滑動的ViewPager 上下文中,出現瞭如何在各個Fragment 中觸發資料獲取請求的問題使用專用按鈕滑動後變得可見。

初始方法

  1. setUserVisibleHint():最初使用,但在動畫播放時導致滯後
  2. OnPageChangeListener()
  3. :成功監視頁面變更的更好方法。

問題

但是,從 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>

對於ViewPager2 和Kotlin,解決方案類似:

注意:如果使用不同的片段類,請考慮使用sendGetRequest() 方法實作一個接口,並在每個片段都是一個更乾淨的解決方案。

以上是如何從 Activity 呼叫 ViewPager 片段中的方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn