解决APP中fragment重叠问题

2018/05/04 note 共 957 字,约 3 分钟

此文章来源于:http://www.cnblogs.com/shuijilove/p/5592439.html

由于内存重启,导致的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

参考文章:

文档信息

Search

    Table of Contents