繁体   English   中英

Android ViewPager片段生命周期

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM