0

我有一个文件fragment它在viewpager里面,我在应用程序的另一部分中使用相同的Document fragment的实例。我的问题是,在片段我正在注册一个广播接收器,通常我正在取消它的方法在片段中的注册。但是当我切换另一个时,不会调用片段方法。所以下一个片段viewpager我使用Document fragment的新实例,并且我也创建了接收器的新实例。但onReceive方法接收器调用viewpager的文件fragment方法。所以当看看logcat时,我可以看到我无法注销接收者。我如何取消注册接收者,我可以获得已注册的接收者列表吗?Android viewpager fragment lifecyle

+0

您使用哪种适配器来扩展ViewPager中的片段? –

+0

我正在使用FragmentStatePagerAdapter,在getItemMethod我创建像Document.newInstance();按位置 – Hmm

+0

我已在下面发布答案。请看看。如果您仍然有任何疑问,请随时询问。 –

回答

0

尝试在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。

0

也许你可以在你的片段使用setUserVisibleHint()方法...或者其他的想法,注册OnPageChangeListener对你的看法寻呼机从这个监听器可以manualy调用方法注销您的reciever ...

0

谢谢所有为您的答案,正如你所说我实施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; 
    }