2016-08-07 58 views
1

我非常希望在Android上使用新的數據綁定支持,最終擺脫與RecyclerViews相關的所有樣板,只是發現在官方的Android數據綁定文檔中幾乎沒有提及這個主題。Android DatabindingUtils:如何在整個項目中使用單個適配器?

所以,即使你我發現一對夫婦的博客文章與主題「提示」,我還在尋找如何避免創造每recyclerview例如適配器一個完整的示例實現。

這裏的一些參考代碼,但它不是完整的: https://stfalcon.com/en/blog/post/faster-android-apps-with-databinding#takeaways

+1

假設你的意思是「避免創建每個不同的數據集適配器類和渲染規則集用在'RecyclerView'」,這不會是可能除了在有限的情況下。 'RecyclerView.Adapter'是知道你的數據來自哪裏的類;其代碼會因數據表示而有所不同(例如'ArrayList'與'[]'與'Cursor')。 'Adapter'子類還處理諸如多視圖類型和數據插入/刪除等事情,這些都超出了數據綁定框架的範圍。 – CommonsWare

+0

您可以在博客作者推送到[GitHub](https://github.com/stfalcon-studio/DataBindingExample)的示例應用程序中找到完整的'RecyclerView.Adapter'。 – yennsarah

+0

謝謝Amylinn,但看起來你鏈接的例子是雙向數據綁定,這不是recyclerviews的用例。 – JayJay

回答

1

有使用委託很好的解決方案 - http://hannesdorfmann.com/android/adapter-delegates 我用它與數據綁定簡單的修改辦法。

如果您正在尋找簡單的方法,看看這個庫https://github.com/drstranges/DataBinding_For_RecyclerView

任何方式,即使你使用的是常見的方式,神奇的是在綁定ViewHolder:

public class BindingHolder<VB extends ViewDataBinding> extends RecyclerView.ViewHolder { 

    private VB mBinding; 

    public static <VB extends ViewDataBinding> BindingHolder<VB> newInstance(
      @LayoutRes int layoutId, LayoutInflater inflater, 
      @Nullable ViewGroup parent, boolean attachToParent) { 

     VB vb = DataBindingUtil.inflate(inflater, layoutId, parent, attachToParent); 
     return new BindingHolder<>(vb); 
    } 

    public BindingHolder(VB binding) { 
     super(binding.getRoot()); 
     this.mBinding= binding; 
    } 

    public VB getBinding() { 
     return mBinding; 
    } 
} 

onCreateViewHolder

{ 
    BindingHolder holder = BindingHolder.newInstance(R.layout.item, 
      LayoutInflater.from(parent.getContext()), parent, false); 
    //set listeners and action handlers 
    return holder; 
} 

in onBindViewHolder

{ 
    ItemBinding binding = holder.getBinding(); 
    Item item = items.get(position); 
    binding.setItem(item); 
    binding.executePendingBindings(); 
} 
// or 
{ 
    ViewDataBinding binding = holder.getBinding(); 
    Object item = items.get(position); 
    binding.setVariable(BR.item, item); 
    binding.executePendingBindings(); 
} 
相關問題