[英]Android viewpager fragment lifecyle
我在viewpager
內部有一個Document fragment
,並且在應用程序的另一部分中使用了相同Document片段的實例。 我的問題是,在片段中我正在注冊一個廣播接收器,通常我在片段中正在onPause
方法上取消它的注冊。 但是當我切換另一個時,片段onPause
方法不會被調用。 因此, viewpager
下一個片段我將使用Document片段的新實例,並且還將創建接收者的新實例。 但是onReceive
方法的接收者會調用viewpager的文檔fragment
方法。 因此,當查看logcat時,我可以看到我無法注銷接收器。 我如何注銷接收者,可以獲取已注冊的接收者列表?
嘗試在ViewPager的OnPageChangeListener
注冊和注銷廣播接收器。 該偵聽器包含3個方法,分別是onPageScrollStateChanged(int state)
, onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
和onPageSelected(int position)
。
使用onPageScrolledStateChanged()
方法。 它使用3種狀態來監視ViewPager中的片段。 使用SCROLL_STATE_DRAGGING
取消注冊您的BroadcastReceiver,使用SCROLL_STATE_SETTLING
注冊您的BroadcastReceiver。
也許您可以在片段中使用setUserVisibleHint()方法...或另一個想法,在視圖分頁器上注冊OnPageChangeListener,然后從此偵聽器中手動調用方法以注銷接收者...
謝謝大家的回答,正如您所說的,我實現了OnPageChangeListener
並創建了一個邏輯,它現在工作正常。 再次謝謝大家,我正在發布代碼:
@Override
public void onPageSelected(int position) {
Fragment currentFragment = adapterViewPager.getRegisteredFragment(position);
if(currentFragment.getClass()==Document.class){
Log.i (AppConfig.TAG,"Current Fragment is Document");
Document document = (Document)currentFragment;
document.registerDownloadService();
}
if(lastFragment!=null && lastFragment.getClass()==Document.class){
Log.i (AppConfig.TAG,"Previous Fragment is Document");
Document document = (Document)lastFragment;
document.unregisterDownloadService();
}
lastFragment = currentFragment;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.