Android viewpager片段lifecyle

时间:2016-04-27 09:44:04

标签: android android-fragments android-viewpager broadcastreceiver

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

3 个答案:

答案 0 :(得分:0)

尝试在ViewPager select name, group_concat(amount) from sample group by name 中注册和取消注册广播接收器。该侦听器包含3种方法,即OnPageChangeListeneronPageScrollStateChanged(int state)onPageScrolled(int position, float positionOffset, int positionOffsetPixels)

使用onPageSelected(int position)方法。它使用3种状态来监视ViewPager中的Fragments。使用onPageScrolledStateChanged()取消注册BroadcastReceiver,使用SCROLL_STATE_DRAGGING注册BroadcastReceiver。

答案 1 :(得分:0)

也许你可以在你的片段中使用setUserVisibleHint()方法...或者另一个想法,在你的视图寻呼机上注册OnPageChangeListener,你可以从这个监听器中手动调用取消注册接收器的方法......

答案 2 :(得分: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;
   }