美文网首页
RecyclerView的adapter的简单封装

RecyclerView的adapter的简单封装

作者: 南娇 | 来源:发表于2018-05-29 17:42 被阅读6次

冰冻三尺非一日之寒,所有的创新都是在大量的知识积累的基础上出来的,所以只有不断的积累知识,才能有更好的创新。第一次写,写的不好大家多多包涵。我也是站在巨人的肩膀上的

一、adapter的修改该

public abstract class GlobleAdapter<T> extends RecyclerView.Adapter<ViewHolder> {
private Context mContext;
private LayoutInflater mInflater;
List<T> mDatas;
private int mLayoutId;
public GlobleAdapter(Context context, List<T> datas, int layoutId) {
    this.mContext = context;
    if (datas != null && datas.size() > 0) {
        this.mDatas = datas;
    } else {
        mDatas = new ArrayList<>();
    }
    mInflater = LayoutInflater.from(context);
    this.mLayoutId = layoutId;

}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = mInflater.inflate(mLayoutId, parent, false);
    ViewHolder viewHolder = new ViewHolder(itemView);
    return viewHolder;
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

}

@Override
public int getItemCount() {
    if (mDatas != null && mDatas.size() > 0) {
        return mDatas.size();
    }
    return 0;
}

//添加数据
public void addDatas(List<T> datas) {
    if (datas != null && datas.size() > 0) {
        mDatas.addAll(datas);
    }
    notifyDataSetChanged();
}

//清楚所有数据
public void clear() {
    mDatas.clear();
    notifyDataSetChanged();
}

//获取数据集合
public List<T> getDatas() {
    return mDatas;
}

}

二、ViewHolder的修改该

public class ViewHolder extends RecyclerView.ViewHolder {
private SparseArray<View> mViews;
public ViewHolder(View itemView) {
    super(itemView);
    mViews = new SparseArray<>();
}

/**
 * 通过id获取view
 *
 * @param viewId
 */
public <T extends View> T getView(int viewId) {
    View view = mViews.get(viewId);
    if (view == null) {
        view = itemView.findViewById(viewId);
        mViews.put(viewId, view);
    }
    return (T) view;
}

/**
 * 设置当前控件是否显示
 *
 * @param viewId
 * @param visible
 * @return
 */
public ViewHolder setViewVisible(int viewId, int visible) {
    getView(viewId).setVisibility(visible);
    return this;
}

/**
 * 设置textview的内容
 *
 * @param viewId
 * @param text
 * @return
 */
public ViewHolder setText(int viewId, CharSequence text) {
    TextView textView = getView(viewId);
    textView.setText(text);
    return this;
}

/**
 * 给imageView设置本地图片
 *
 * @param viewId
 * @param resource
 * @return
 */
public ViewHolder setImgResource(int viewId, int resource) {
    ImageView imageView = getView(viewId);
    imageView.setImageResource(resource);
    return this;
}

/**
 * 设置条目的监听
 *
 * @param listener
 * @return
 */
public ViewHolder setItemClickListener(View.OnClickListener listener) {
    itemView.setOnClickListener(listener);
    return this;
}
}

三、应用

activity

    LinearLayoutManager manager = new LinearLayoutManager(this);
    recyclerview.setLayoutManager(manager);
    adapter = new RecyclerViewAdapter(this, null, R.layout.item_home, this);
    recyclerview.setAdapter(adapter);
    adapter.addDatas(mDatas);

adapter

public class RecyclerViewAdapter extends CurrencyAdapter<String> {
private Context mContext;
private ItemListener mItemListener;

public RecyclerViewAdapter(Context context, List<String> datas, int layoutId, ItemListener itemListener) {
    super(context, datas, layoutId, itemListener);
    this.mContext = context;
    this.mItemListener = itemListener;
}

@Override
protected void convert(ViewHolder holder, final int position) {
    holder.setText(R.id.id_num, getDatas().get(position)).setItemClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mItemListener.itemListener(position);
        }
    });
}
}

相关文章

网友评论

      本文标题:RecyclerView的adapter的简单封装

      本文链接:https://www.haomeiwen.com/subject/mlmajftx.html