在此場景中,在 Activity 中實作了具有六個片段的 ViewPager。片段之間的滑動已停用,因此可以使用按鈕來更改目前片段。滑動完成後,向伺服器發送 GET 請求,並在每個片段中顯示回應資料。
第一種方法(使用 setUserVisibleHint)
最初, setUserVisibleHint 方法用於在片段變得可見時觸發 GET 請求。然而,由於立即執行請求,這種方法導致了滑動動畫的延遲。
第二種方法(使用 OnPageChangeListener)
克服動畫滯後,一個 OnPageChangeListener 被加入到 ViewPager 中。此偵聽器追蹤頁面捲動狀態,並在所需片段完全可見時(即捲動狀態等於 IDLE)發送 GET 請求。
問題與解決方案
The第二種方法效果很好,但執行sendGetRequest()時出現NullPointerException。這是因為沒有正確取得片段引用。為了解決這個問題,有必要在 FragmentPagerAdapter 的 instantiateItem 方法中儲存對片段的參考。然後,在 OnPageChangeListener 中,可以使用 ViewPagerPagerAdapter 引用的片段,而不是建立新片段。
更新了 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>
這裡的mAdapter指的是ViewPager2內部使用的FragmentPagerAdapter。
以上是如何從 Activity 存取和執行 ViewPager 片段中的方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!