3-DataBinding.md 3.1 KB
Newer Older
limuyang2's avatar
limuyang2 已提交
1 2
# DataBinding

limuyang2's avatar
limuyang2 已提交
3
## 基于 BaseQuickAdapter 的用法:
limuyang2's avatar
limuyang2 已提交
4 5 6 7 8 9 10 11 12 13 14 15

代码如下:

```java
public class DataBindingAdapter extends BaseQuickAdapter<Movie, BaseViewHolder> {

    private MoviePresenter mPresenter = new MoviePresenter();

    public DataBindingAdapter() {
        super(R.layout.item_movie);
    }
		
limuyang2's avatar
limuyang2 已提交
16 17 18 19
    /**
     * 当 ViewHolder 创建完毕以后,会执行此回掉
     * 可以在这里做任何你想做的事情
     */
limuyang2's avatar
limuyang2 已提交
20 21 22 23 24 25 26
    @Override
    protected void onItemViewHolderCreated(@NotNull BaseViewHolder viewHolder, int viewType) {
        // 绑定 view
        DataBindingUtil.bind(viewHolder.itemView);
    }

    @Override
limuyang2's avatar
limuyang2 已提交
27
    protected void convert(@NotNull BaseViewHolder helper, @NotNull Movie item) {
limuyang2's avatar
limuyang2 已提交
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
        if (item == null) {
            return;
        }

        // 获取 Binding
        ItemMovieBinding binding = helper.getBinding();
        if (binding != null) {
            // 设置数据
            binding.setMovie(item);
            binding.setPresenter(mPresenter);
            binding.executePendingBindings();
        }
    }
}
```



limuyang2's avatar
limuyang2 已提交
46
## 基于 BaseProviderMultiAdapter 的用法
limuyang2's avatar
limuyang2 已提交
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96

由于使用了`Provider`,所以相关事务并不在`Adapter`里处理。需要在`Provider`中对数据进行绑定。

`Adapter`代码如下(无需特殊处理,和普通的`BaseProviderMultiAdapter`写法一样):

```java
public class ProviderMultiAdapter extends BaseProviderMultiAdapter<ProviderMultiEntity> {

    public ProviderMultiAdapter() {
        super();
        addItemProvider(new ImgItemProvider());
        addItemProvider(new TextImgItemProvider());
        addItemProvider(new TextItemProvider());
    }

    /**
     * 自行根据数据、位置等内容,返回 item 类型
     */
    @Override
    protected int getItemType(@NotNull List<? extends ProviderMultiEntity> data, int position) {
        switch (position % 3) {
            case 0:
                return ProviderMultiEntity.IMG;
            case 1:
                return ProviderMultiEntity.TEXT;
            case 2:
                return ProviderMultiEntity.IMG_TEXT;
            default:
                break;
        }
        return 0;
    }
}
```

`Provider`代码如下:

```java
public class ImgItemProvider extends BaseItemProvider<ProviderMultiEntity> {

    @Override
    public int getItemViewType() {
        return ProviderMultiEntity.IMG;
    }

    @Override
    public int getLayoutId() {
        return R.layout.item_image_view;
    }

limuyang2's avatar
limuyang2 已提交
97 98 99 100
    /**
     * 当 ViewHolder 创建完毕以后,会执行此回掉
     * 可以在这里做任何你想做的事情
     */
limuyang2's avatar
limuyang2 已提交
101 102 103 104 105 106 107
    @Override
    public void onViewHolderCreated(@NotNull BaseViewHolder viewHolder) {
        // 绑定View
        DataBindingUtil.bind(viewHolder.itemView);
    }

    @Override
limuyang2's avatar
limuyang2 已提交
108
    public void convert(@NotNull BaseViewHolder helper, @NotNull ProviderMultiEntity data) {
limuyang2's avatar
limuyang2 已提交
109 110 111 112 113 114 115 116 117 118 119 120
        Movie movie = data.getMovie();
        // 获取 Binding
        ItemMovieBinding binding = helper.getBinding();
        if (binding != null) {
            binding.setMovie(movie);
            binding.executePendingBindings();
        }
    }

}
```