Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了被另一个片段覆盖的Android片段仍然是已显示而不是onPause大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的应用程序中,我在MainActivity中捕获onBACkPressed并向片段发送广播.每个片段中的接收器都打开或关闭

@Override
public void onPause() {
    super.onPause();
    getActivity().unregisterReceiver(receiver);

    Bundle args = getArguments();
    int tab = args.geTint("Tab");
    Log.d(log,String.format("Tab1Fragment %d onPause",tab));

}

@Override
public 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));

}@H_772_8@ 
 

另外,在广播接收器中,我检查片段的可见性以确保,只有可见片段可以处理BACkPressed事件:

if (intent.getAction().equals("de.foo.BACkPressed")) {
    if (getView() != null && getView().isShown()) {
        ...
    }
}@H_772_8@ 
 

当我用另一个片段替换现有的和可见的片段时,不会在被替换的片段上调用onPause().它的广播接收器仍然启用.也是新片段中的接收器.这两个片段对于getView().isShown()都是真的,但事实并非如此:只有最后一个片段是可见的.

我怎样才能实现只有可见片段的反应呢?

编辑:第一个片段加载到我的标签栏的标签0中.我得到日志“Tab1Fragment 0 onResume”并启用广播接收器.@H_674_19@在此片段中,用户点击列表条目以显示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();@H_772_8@ 
 

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();@H_772_8@ 
 

在这代码片段中,FragmentA的onPause()将在FragmentB的onResume()之前调用(当你点击FragmentB的on-onPause() – > FragmentA的onResume()时).

replace() – 与使用相同的containerViewId添加的所有当前添加的片段调用remove(Fragment)相同,然后使用相同的参数添加(int,Fragment,String).而add() – 只是将一个片段添加到活动状态.

如果您只是添加()新片段(或添加两者,然后只是通过show()/ hide()切换它们) – 一些生命周期方法将从您身上溜走.

如果有帮助,请告诉我.

大佬总结

以上是大佬教程为你收集整理的被另一个片段覆盖的Android片段仍然是已显示而不是onPause全部内容,希望文章能够帮你解决被另一个片段覆盖的Android片段仍然是已显示而不是onPause所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。