2016-08-07 13 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(); 
} 
相关问题