解决APP中fragment重叠问题


      由于内存重启,导致的frgament重叠,其原因就是FragmentState没有保存Fragment的显示状态,即mHidden,导致页面重启后,该值为默认的false,即show状态,所以导致了Fragment的重叠。

那么解决方案就是自己写一些代码去保存fragment的显示状态。

      当发生内存重启的时候,fragment会触onSaveInstanceState方法,那么我们可以在这个方法内部去保存当前状态,然后在onCreate中进行取值回复,代码如下:

public class BaseFragment extends Fragment {
    private static final String STATE_SAVE_IS_HIDDEN = "STATE_SAVE_IS_HIDDEN";

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
    ...
    if (savedInstanceState != null) {
        boolean isSupportHidden = savedInstanceState.getBoolean(STATE_SAVE_IS_HIDDEN);

        FragmentTransaction ft = getFragmentManager().beginTransaction();
        if (isSupportHidden) {
            ft.hide(this);
        } else {
            ft.show(this);
        }
        ft.commit();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putBoolean(STATE_SAVE_IS_HIDDEN, isHidden());
    }
}

参考开源项目:https://github.com/YoKeyword/Fragmentation

参考文章:

  • Fragment全解析系列(一):那些年踩过的坑

    http://www.jianshu.com/p/d9143a92ad94

  • Fragment全解析系列(二):正确的使用姿势

    http://www.jianshu.com/p/fd71d65f0ec6

  • Fragment之我的解决方案:Fragmentation

       http://www.jianshu.com/p/38f7994faa6b

  • Android Fragment 你应该知道的一切

       http://blog.csdn.net/lmj623565791/article/details/42628537

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM