RecycleView+ViewDataBinding+BaseAdapter

来源:互联网 发布:ps4白金神作 知乎 编辑:程序博客网 时间:2024/06/06 03:42

BaseRecyclerViewHolder.java

package com.xl.test.base.baseAdapter;import android.databinding.DataBindingUtil;import android.databinding.ViewDataBinding;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.ViewGroup;/** * Created by hushendian on 2017/10/24. */public abstract class BaseRecyclerViewHolder<T, D extends ViewDataBinding> extends RecyclerView        .ViewHolder {    public D binding;    public BaseRecyclerViewHolder(ViewGroup viewGroup, int layoutId) {        super(DataBindingUtil.inflate(LayoutInflater.from(viewGroup.getContext()), layoutId,                viewGroup, false).getRoot());        binding = DataBindingUtil.getBinding(this.itemView);    }    public abstract void onBindViewHolder(T object, final int position);    void onBaseBindViewHolder(T object, final int position) {        onBindViewHolder(object, position);        binding.executePendingBindings();    }}

BaseRecyclerViewAdapter.java

package com.xl.test.base.baseAdapter;import android.support.v7.widget.RecyclerView;import android.util.Log;import java.util.ArrayList;import java.util.List;/** * Created by hushendian on 2017/10/25. */public abstract class BaseRecyclerViewAdapter<T> extends RecyclerView.Adapter<BaseRecyclerViewHolder> {    private List<T> data = new ArrayList<>();    protected OnItemClickListener<T> listener;    protected OnItemLongClickListener<T> onItemLongClickListener;    @Override    public void onBindViewHolder(BaseRecyclerViewHolder holder, int position) {        holder.onBaseBindViewHolder(data.get(position), position);    }    @Override    public int getItemCount() {        Log.d("BaseRecyclerViewAdapter", "getItemCount: "+data.size());        return data.size();    }    public void addAll(List<T> data) {        this.data.addAll(data);    }    public void add(T t) {        this.data.add(t);    }    public void clear() {        this.data.clear();    }    public void remove(T t) {        this.data.remove(t);    }    public void remove(int position) {        this.data.remove(position);    }    public void removeAll(List<T> ts) {        this.data.removeAll(ts);    }    public void setOnItemClickListener(OnItemClickListener<T> listener) {        this.listener = listener;    }    public List<T> getData() {        return data;    }    public void setOnItemLongClickListener(OnItemLongClickListener<T> onItemLongClickListener) {        this.onItemLongClickListener = onItemLongClickListener;    }}

具体调用Adapter

package com.xl.test.adapter;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.view.ViewGroup;import com.xl.test.R;import com.xl.test.base.baseAdapter.BaseRecyclerViewAdapter;import com.xl.test.base.baseAdapter.BaseRecyclerViewHolder;import com.xl.test.bean.GankIoDataBean;import com.xl.test.databinding.ItemAndroidBinding;import com.xl.test.utils.ImageUtils;import com.xl.test.view.webView.WebViewActivity;/** * Created by hushendian on 2017/11/6. */public class AndroidAdapter extends BaseRecyclerViewAdapter<GankIoDataBean.ResultBean> {    @Override    public BaseRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        return new ViewHolder(parent, R.layout.item_android);    }    private class ViewHolder extends BaseRecyclerViewHolder<GankIoDataBean.ResultBean,            ItemAndroidBinding> {        public ViewHolder(ViewGroup viewGroup, int layoutId) {            super(viewGroup, layoutId);        }        @Override        public void onBindViewHolder(final GankIoDataBean.ResultBean object, int position) {                   }    }}