從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中文網其他相關文章!