-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が生成されないことになりました。