我有一个文档fragment
位于viewpager
内,我在应用程序的另一部分使用相同的Document片段实例。我的问题是,在片段中我正在注册广播接收器,通常我在片段中取消注册它onPause
方法。但是当我切换另一个时,不会调用片段onPause
方法。所以viewpager
的下一个片段我使用了Document片段的新实例,我也在创建接收器的新实例。但是onReceive
方法接收器调用了viewpager的文档fragment
方法。所以当看看logcat时我可以看到我无法取消注册接收器。如何取消注册接收者,我可以获得已注册的接收者列表吗?
答案 0 :(得分:0)
尝试在ViewPager select name, group_concat(amount) from sample
group by name
中注册和取消注册广播接收器。该侦听器包含3种方法,即OnPageChangeListener
,onPageScrollStateChanged(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;
}