You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.4 KiB
Java

1 year ago
package com.xypower.wpywapp.page;
import android.os.Bundle;
import android.util.SparseArray;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ViewDataBinding;
/**
* Create by KunMinX at 19/8/1
*/
public abstract class DataBindingActivity extends AppCompatActivity {
private ViewDataBinding mBinding;
private TextView mTvStrictModeTip;
protected abstract void initViewModel();
protected abstract DataBindingConfig getDataBindingConfig();
/**
* TODO tip: 使 binding view 使
* debug
* <p>
* https://xiaozhuanlan.com/topic/9816742350 和 https://xiaozhuanlan.com/topic/2356748910
*
* @return binding
*/
protected ViewDataBinding getBinding() {
return mBinding;
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initViewModel();
DataBindingConfig dataBindingConfig = getDataBindingConfig();
//TODO tip: DataBinding 严格模式:
// 将 DataBinding 实例限制于 base 页面中,默认不向子类暴露,
// 通过这方式,彻底解决 视图调用一致性问题,
// 如此,视图调用安全性将与基于函数式编程思想 Jetpack Compose 持平。
// 如这么说无体会,详见 https://xiaozhuanlan.com/topic/9816742350 和 https://xiaozhuanlan.com/topic/2356748910
ViewDataBinding binding = DataBindingUtil.setContentView(this, dataBindingConfig.getLayout());
binding.setLifecycleOwner(this);
binding.setVariable(dataBindingConfig.getVmVariableId(), dataBindingConfig.getStateViewModel());
SparseArray<Object> bindingParams = dataBindingConfig.getBindingParams();
for (int i = 0, length = bindingParams.size(); i < length; i++) {
binding.setVariable(bindingParams.keyAt(i), bindingParams.valueAt(i));
}
mBinding = binding;
}
@Override
protected void onDestroy() {
super.onDestroy();
mBinding.unbind();
mBinding = null;
}
}