【问题标题】:Interfaces and Generated Binding Files接口和生成的绑定文件
【发布时间】:2017-03-16 01:35:00
【问题描述】:

我正在将数据绑定与 RecyclerView 一起使用,该 RecyclerView 具有多个不同的布局文件,但有一个通用的视图模型。有没有办法让生成的绑定文件实现一个通用接口来简化以下(工作但丑陋的)代码?

给定布局文件,例如:

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));
        }

我知道上面的例子还不错,但是如果能够操作一组 Binding 文件会很方便,它们共享共同的东西,而不必经常检查和转换它们的类型,尤其是在更复杂的情况下.

【问题讨论】:

    标签: android data-binding interface android-databinding


    【解决方案1】:

    查看这篇文章:

    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();
    }
    

    【讨论】:

    • executePendingBindings() 可能也值得致电。
    • 好东西!还有一篇非常有用且相关的文章。
    【解决方案2】:

    您应该重写函数 getViewType(int position) 以获得要绑定数据的正确布局

    【讨论】:

      猜你喜欢
      • 2023-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 2012-03-21
      • 1970-01-01
      相关资源
      最近更新 更多