【安卓】Navigation导航返回后重复执行onCreateView的解决办法

  @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.succulent_list_fragment,
                container, false);
        if(mView==null){
            mView = mBinding.getRoot();
        }
        return mView;
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        model = new SucculentListViewModel();
        mBinding.setModel(model);
        model.setBroccoli(mBroccoli);
        model.setFragment(this);
        model.setBinding(mBinding);
        model.initView();
    }

将View的初始化工作放在生命周期onActivityCreated中即可。

我想它也算是一个特殊的生命周期。用来比喻为托管Viiew状态的工作比较好。

Fragment执行前的最后一步,Activity和Fragment已经绑定完成,View已经创建好。

网上的说法是动态的View都需要放在onActivityCreated。

网上有一些其它处理方法,用的时候,导航会出现问题。

第1个是,

把View初始化放在onAttach,然后在onCreateView中访问已保存成员mView。

静态的mView最终会无法使用导航的各类动态功能,我“猜测”任何Fragment动态都是通过onActivityCreated来初始化的吧。

以及在onCreate前面创建初始化View,绘图相关的方法还没有被执行,如果View中有动态调用的视图参数,比如LayoutParams.height这种,就会出现空指针的状况。

第2个是

保存当前的数据,就像savedInstance一样。

但是我在父Fragment中用ViewPager嵌套了Fragment。这个保存工作或许过于庞大,并且也不应该视图创建者保存。

你可能感兴趣的:(安卓)