package com.xypower.wpywapp.page; import android.content.Context; import android.os.Bundle; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.DataBindingUtil; import androidx.databinding.ViewDataBinding; import androidx.fragment.app.Fragment; /** * Create by KunMinX at 19/7/11 */ public abstract class DataBindingFragment extends Fragment { protected AppCompatActivity mActivity; private ViewDataBinding mBinding; private TextView mTvStrictModeTip; @Override public void onAttach(@NonNull Context context) { super.onAttach(context); mActivity = (AppCompatActivity) context; } protected abstract void initViewModel(); @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); initViewModel(); } protected abstract DataBindingConfig getDataBindingConfig(); /** * TODO tip: 警惕使用。非必要情况下,尽可能不在子类中拿到 binding 实例乃至获取 view 实例。使用即埋下隐患。 * 目前方案是于 debug 模式,对获取实例情况给予提示。 *
* 如这么说无体会,详见 https://xiaozhuanlan.com/topic/9816742350 和 https://xiaozhuanlan.com/topic/2356748910 * * @return binding */ protected ViewDataBinding getBinding() { return mBinding; } @Nullable @Override public View onCreateView( @NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState ) { DataBindingConfig dataBindingConfig = getDataBindingConfig(); //TODO tip: DataBinding 严格模式: // 将 DataBinding 实例限制于 base 页面中,默认不向子类暴露, // 通过这方式,彻底解决 视图调用一致性问题, // 如此,视图调用安全性将与基于函数式编程思想 Jetpack Compose 持平。 // 如这么说无体会,详见 https://xiaozhuanlan.com/topic/9816742350 和 https://xiaozhuanlan.com/topic/2356748910 ViewDataBinding binding = DataBindingUtil.inflate(inflater, dataBindingConfig.getLayout(), container, false); binding.setLifecycleOwner(getViewLifecycleOwner()); binding.setVariable(dataBindingConfig.getVmVariableId(), dataBindingConfig.getStateViewModel()); SparseArray