2017-03-16 80 views
0

我正在使用具有多個不同佈局文件但共同視圖模型的RecyclerView進行數據綁定。有沒有辦法讓生成的Binding文件實現一個通用接口來簡化以下(工作但醜陋)的代碼?接口和生成的綁定文件

定佈局文件,如:

R.layout.list_item_cat 
R.layout.list_item_dog 
R.layout.list_item_mouse 

內ActionAdapter:

@Override 
    public ActionAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     @LayoutRes int layoutToInflate; 
     switch (viewType) { 
      case 0: 
       layoutToInflate = R.layout.list_item_cat; 
       break; 
      case 1: 
       layoutToInflate = R.layout.list_item_dog; 
       break; 
      case 2: 
       layoutToInflate = R.layout.list_item_mouse; 
       break; 
     } 
     return new ViewHolder(DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), layoutToInflate, parent, false)); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     if (holder.mBinding instanceof ListItemCatBinding) { 
      ((ListItemCatBinding) holder.mBinding).setViewModel(mViewModelList.get(position)); 
     } 
     else if (holder.mBinding instanceof ListItemDogBinding) { 
      ((ListItemDogBinding) holder.mBinding).setViewModel(mViewModelList.get(position)); 
     } 
     else if (holder.mBinding instanceof ListItemMouseBinding) { 
      ((ListItemMouseBinding) holder.mBinding).setViewModel(mViewModelList.get(position)); 
     } 

我知道上面的例子是不是太糟糕,但它會很方便,能夠操縱一組綁定文件,它們共享相同的東西,而不必經常檢查和投射它們的類型,特別是在更復雜的情況下。

回答

3

看看這篇文章:

https://medium.com/google-developers/android-data-binding-recyclerview-db7c40d9f0e4#.l6soxb3sd

您可以使用:

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    holder.mBinding.setVariable(BR.viewModel, mViewModelList.get(position)); 
    holder.mBinding.executePendingBindings(); 
} 
+0

'executePendingBindings()'也可能值得打電話。 – tynn

+0

同意。我會編輯它來補充。謝謝! –

+0

好東西!還有一篇非常有用和相關的文章。 – Dave

0

,你應該重寫功能getViewType(INT位置)用於獲取要結合數據

正確的佈局