当前位置:  开发笔记 > Android > 正文

具有多个viewtype的Android recyclelerview适配器,使用数据绑定

如何解决《具有多个viewtype的Androidrecyclelerview适配器,使用数据绑定》经验,为你挑选了1个好方法。

是否可以在我的适配器中创建多视图类型..就像为我的标题添加视图然后在标题下面是一个列表.

我的适配器的代码段:

 public class StoreAdapter extends RecyclerView.Adapter {

        List mStoreList;

        public class BindingHolder extends RecyclerView.ViewHolder {
            private ViewDataBinding binding;
            public BindingHolder(View v) {


  super(v);
            binding = DataBindingUtil.bind(v);
        }
        public ViewDataBinding getBinding() {
            return binding;
        }
    }

    public StoreAdapter(List storeList) {
        this.mStoreList = storeList;
    }

    @Override
    public BindingHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row_store, parent, false);
        BindingHolder holder = new BindingHolder(v);
        return holder;
    }

    @Override
    public void onBindViewHolder(BindingHolder holder, int position) {
        final Store store =  mStoreList.get(position);
        holder.getBinding().setVariable(BR.store, store);
        holder.getBinding().executePendingBindings();
    }

    @Override
    public int getItemCount() {
        return mStoreList.size();
    }
}

更多细节:

目前我的适配器仅支持1种视图类型.是否可以使用另一种支持数据绑定的视图类型?



1> 小智..:

一个ViewHolder中可以使用多个绑定。这是具有两种类型的项目的适配器的示例:

public class MyAdapter extends RecyclerView.Adapter {

    private static final int CELL_TYPE_HEADER = 0;
    private static final int CELL_TYPE_REGULAR_ITEM = 1;

    class MyViewHolder extends RecyclerView.ViewHolder {
        private HeaderBinding headerBinding;
        private RegularItemBinding regularItemBinding;

        MyViewHolder(HeaderBinding binding) {
            super(binding.getRoot());
            headerBinding = binding;
        }

        MyViewHolder(RegularItemBinding binding) {
            super(binding.getRoot());
            regularItemBinding = binding;
        }
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        ViewDataBinding binding;
        switch (viewType) {
            case CELL_TYPE_HEADER:
                binding = DataBindingUtil.inflate(inflater, R.layout.header, parent, false);
                return new MyViewHolder((HeaderBinding) binding);
            case CELL_TYPE_REGULAR_ITEM:
                binding = DataBindingUtil.inflate(inflater, R.layout.regular_item, parent, false);
                return new MyViewHolder((RegularItemBinding) binding);
        }
        return null;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        MyViewModel viewModel = new MyViewModel(getItem(position));
        switch (holder.getItemViewType()) {
            case CELL_TYPE_HEADER:
                HeaderBinding headerBinding = holder.headerBinding;
                viewModel.setSomething(...);
                headerBinding.setViewModel(viewModel);
                break;
            case CELL_TYPE_REGULAR_ITEM:
                RegularItemBinding regularItemBinding = holder.regularItemBinding;
                viewModel.setSomething(...);
                regularItemBinding.setViewModel(viewModel);
                break;
        }
    }

    @Override
    public int getItemViewType(int position) {
        if (position == 0) {
            return CELL_TYPE_HEADER;
        } else {
            return CELL_TYPE_REGULAR_ITEM;
        } 
    }
}

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有