[英]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.