-3
Google의 Android DataBinding 라이브러리에 의존하는 사람들에게는 질문이지만 힌트는 아닙니다.Android 데이터 바인딩 일반화 문제
그래서 바인딩의 방법을 조정하고 view-models
부모에게 Activity
클래스로 유지함으로써 알리고 싶었습니다. 기본적으로 보이는 모양은 다음과 같습니다.
interface AbsViewModel extends BaseObservable {
final int NO_ID = -1;
int getVariableId();
void start();
void stop();
}
class abstract AbsBindingActivity<VB extends ViewDataBinding> extends Activity {
private Map<Integer, AbsViewModel> mViewModels;
private VB mBinding;
public abstract getLayoutResource();
protected void onCreate(Bundle savedInstanceState) {
mBinding = DataBindingUtil.setContentView(this, getLayoutResource());
}
public VB getBinding() {
return mBinding;
}
public <VM extends AbsViewModel> VM registerViewModel(VM viewModel) {
int variableId = viewModel.getVariableId();
if (variableId != AbsViewModel.NO_ID) {
mBinding.setVariable(variableId, viewModel);
}
mViewModels.put(variableId, viewModel);
return viewModel;
}
public <VM extends AbsViewModel> VM unregisterViewModel(int variableId) {
mBinding.setVariable(variableId, null);
return (VM) mViewModels.remove(variableId);
}
@Override
protected void onResume() {
super.onResume();
start();
}
@Override
protected void onPause() {
super.onPause();
stop();
}
@Override
public void onSaveInstanceState(Bundle outState) {
for (AbsViewModel viewModel : mViewModels.values()) {
viewModel.onSaveInstanceState(outState);
}
}
private void start() {
for (AbsViewModel viewModel : mViewModels.values()) {
viewModel.start();
}
}
private void stop() {
for (AbsViewModel viewModel : mViewModels.values()) {
viewModel.stop();
}
}
}
하지만 이상한 이유로 인해 BR과 DataBindings가 생성되지 않았습니다.