
@OverrIDepublic voID onPause() { super.onPause(); getActivity().unregisterReceiver(receiver); Bundle args = getArguments(); int tab = args.getInt("Tab"); Log.d(log,String.format("Tab1Fragment %d onPause",tab));}@OverrIDepublic voID onResume() { super.onResume(); IntentFilter filter = new IntentFilter("de.foo.Backpressed"); receiver = new MyReceiver(); getContext().registerReceiver(receiver,filter); Bundle args = getArguments(); int tab = args.getInt("Tab"); Log.d(log,String.format("Tab1Fragment %d onResume",tab));} 另外,在广播接收器中,我检查片段的可见性以确保,只有可见片段可以处理Backpressed事件:
if (intent.getAction().equals("de.foo.Backpressed")) { if (getVIEw() != null && getVIEw().isShown()) { ... }} 当我用另一个片段替换现有的和可见的片段时,不会在被替换的片段上调用onPause().它的广播接收器仍然启用.也是新片段中的接收器.这两个片段对于getVIEw().isShown()都是真的,但事实并非如此:只有最后一个片段是可见的.
我怎样才能实现只有可见片段的反应呢?
编辑:第一个片段加载到我的标签栏的标签0中.我得到日志“Tab1Fragment 0 onResume”并启用广播接收器.
在此片段中,用户点击列表条目以显示HTML页面.我使用以下代码执行此 *** 作:
HTML_Fragment newFragment = new HTML_Fragment(); newFragment.setArguments(extras); FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.ID.content,newFragment); ft.addToBackStack(null); ft.commit();
HTML_Fragment现在在相同的空间中开始,我看到日志“HTMLFragment 0 onResume”.现在只能看到HTML_Fragment,但我没有得到日志“Tab1Fragment 0 onPause”.两个片段的广播接收器现在都是活动的.那是我的问题.
解决方法 从上面的代码中,我可以猜测,问题的根本原因是什么,但我有一个想法:>确保您将旧片段替换为新片段,而不是在旧片段之上添加新片段:
// to show the root fragment getSupportFragmentManager().beginTransaction(). replace(R.ID.container,new FragmentA()). commit(); .... // to show subfragment (i.e. fragment which is replacing the root fragment) getSupportFragmentManager().beginTransaction(). replace(R.ID.container,new FragmentB()).addToBackStack(null). commit();
在这段代码片段中,FragmentA的onPause()将在FragmentB的onResume()之前调用(当你点击FragmentB的on-onPause() – > FragmentA的onResume()时).
replace() – 与使用相同的containerVIEwID添加的所有当前添加的片段调用remove(Fragment)相同,然后使用相同的参数添加(int,Fragment,String).而add() – 只是将一个片段添加到活动状态.
如果您只是添加()新片段(或添加两者,然后只是通过show()/ hIDe()切换它们) – 一些生命周期方法将从您身上溜走.
如果有帮助,请告诉我.
总结以上是内存溢出为你收集整理的被另一个片段覆盖的Android片段仍然是已显示而不是onPause全部内容,希望文章能够帮你解决被另一个片段覆盖的Android片段仍然是已显示而不是onPause所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)