在禁用手指滑動的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>
對於ViewPager2 和Kotlin,解決方案類似:
注意:如果使用不同的片段類,請考慮使用sendGetRequest() 方法實作一個接口,並在每個片段都是一個更乾淨的解決方案。以上是如何從 Activity 呼叫 ViewPager 片段中的方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!