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

答えて

0

私は実験的に解決策を見つけました。この方法のないいくつかの神秘的な理由(でもbodyless)データバインディングは、BRクラスと実際のバインディングを生成するために失敗した場合:

public void setBinding(VB binding) { }

だから、私はこの問題に、あなたは何をした場合に直面しているどのように多くのあなたの好奇心が強いですそれを解決する他の方法です。

関連する問題