java 只有在可见并完成初始化时才会丢弃数据的片段。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 只有在可见并完成初始化时才会丢弃数据的片段。相关的知识,希望对你有一定的参考价值。

public abstract class LazyFragmentBase extend Fragment {
    protected boolean isVisible;
      
      
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
      
        if(getUserVisibleHint()) {
            isVisible = true;
            onVisible();
        } else {
            isVisible = false;
            onInvisible();
        }
    }
      
    protected void onVisible() {
        lazyLoad();
    }
    
    protected void onInvisible() {
        // no-op  
    }
    
    protected abstract void lazyLoad();
}
public class LazyFragment extends LazyFragmentBase {
    private boolean isPrepared;    // 标志位, 标志已经初始化完成
    
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_open_result, container, false);
        
        // 初始化 view 的各控件
        isPrepared = true;
        lazyLoad();
        
        return view;
    }
    
    @Override
    protected void lazyLoad() {
        if (!isPrepared || !isVisible) {
            return;
        }
        
        //填充各控件的数据
    }
}

以上是关于java 只有在可见并完成初始化时才会丢弃数据的片段。的主要内容,如果未能解决你的问题,请参考以下文章

为啥有些字段只有在调试模式激活时才可见?

在 Web 服务中返回列表时,只有在返回值时才会出现错误?

为什么只有当函数不使用序列破坏时才会发生StackOverflowError?

在我的 Flutter 应用中,只有当我们触摸屏幕时才会加载页面内容。为啥?

Vue的11个生命周期函数的用法

Vue的11个生命周期函数的用法