万能的RecyclerViewAdapter

来源:互联网 发布:linux中的cut命令 编辑:程序博客网 时间:2024/06/07 05:03
我之前在慕课网看过一篇怎么写万能ListView的Adapter的视频.
之后移植到自己的项目之后发现使用非常的方便.
现在用到RecyclerView一没有了,发现很不方便.
于是自己就模仿写了一下万能的RecyclerViewAdapter,使用起来也很方便.
现在记录下来,可以以防忘记,也可以分享给大家.

首先是万能的RecylerViewHolder

/** * Created by sam_m on 15/7/13. */public class CommRecyclerViewHolder extends RecyclerView.ViewHolder {    private SparseArray<View> mView;    private int position;    private int itemType;    private ImageLoader imageLoader;    public CommRecyclerViewHolder(View itemView, ViewGroup parent, int itemType) {        super(itemView);        this.itemType = itemType;        this.mView = new SparseArray<View>();        imageLoader = ImageLoader.getInstance();    }    public static  CommRecyclerViewHolder getCommRecyclerViewHolder(Context context, ViewGroup parent, int layoutId, int itemType) {        CommRecyclerViewHolder holder = new CommRecyclerViewHolder(LayoutInflater.from(context).inflate(layoutId, parent, false), parent, itemType);        return holder;    }    public int getItemType() {        return itemType;    }    public void setPosition(int position) {        this.position = position;    }    /**     * 通过ViewId获取控件     *     * @param viewId     * @param <T>     * @return     */    public <T extends View> T getView(int viewId) {        View view = mView.get(viewId);        if (view == null) {            view = itemView.findViewById(viewId);            mView.put(viewId, view);        }        return (T) view;    }    public View getConvertView() {        return itemView;    }    public View getItemView() {        return itemView;    }    public CommRecyclerViewHolder setText(int viewId, String content) {        TextView textView = getView(viewId);        textView.setText(content);        return this;    }    public CommRecyclerViewHolder setText(int viewId, CharSequence content) {        TextView textView = getView(viewId);        textView.setText(content);        return this;    }   }


这个结合了万能的ViewHolder的RecyclerViewAdapter.

/** * Created by sam_m on 15/7/14. */public abstract class CommRecyclerAdapter<T> extends RecyclerView.Adapter<CommRecyclerViewHolder> {    protected Context mContext;    protected List<T> mdate;    /**     * Item的点击事件     */    protected OnItemClickListener onItemClick;    public CommRecyclerAdapter(Context context) {        mContext = context;        mdate = new ArrayList();    }    public void setData(List<T> list) {        this.mdate.addAll(list);        notifyDataSetChanged();    }    public void addItem(T date) {        mdate.add(date);        notifyDataSetChanged();    }    public void addItem(T date, int positon) {        mdate.add(positon, date);        notifyItemInserted(positon);    }    public void removeItem(int positon) {        mdate.remove(positon);        notifyItemRemoved(positon);    }    public void clearDate() {        mdate.clear();        notifyDataSetChanged();    }    public OnItemClickListener getOnItemClick() {        return onItemClick;    }    public void setOnItemClick(OnItemClickListener onItemClick) {        this.onItemClick = onItemClick;    }    @Override    public CommRecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {        CommRecyclerViewHolder holder = CommRecyclerViewHolder.getCommRecyclerViewHolder(mContext, viewGroup, R.layout.item_layout_function, i);        holder.getConvertView().setOnClickListener(onClickListener);        holder.getConvertView().setTag(holder);        return holder;    }    private final View.OnClickListener onClickListener = new View.OnClickListener() {        @Override        public void onClick(View v) {            if (onItemClick!=null){                CommRecyclerViewHolder holder = (CommRecyclerViewHolder) v.getTag();                onItemClick.onItemClick(v,holder.getPosition());            }        }    };    @Override    public void onBindViewHolder(CommRecyclerViewHolder commRecyclerViewHolder, int i) {        convert(commRecyclerViewHolder, mdate.get(i));    }    public abstract void convert(CommRecyclerViewHolder viewHolder, T t);    @Override    public int getItemCount() {        return mdate.size();    }    public interface OnItemClickListener{        void onItemClick( View view, int position);    }}

最后在Activity或者Fragment里面用
 RecyclerView mRecyclerView = (RecyclerView) rootView.findViewById(R.id.id_recyclerview_horizontal);            LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());            linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);            mRecyclerView.setLayoutManager(linearLayoutManager);            //设置适配器            CommRecyclerAdapter messageRAdapter = new CommRecyclerAdapter<MainMessage>(getActivity()) {                @Override                public void convert(CommRecyclerViewHolder viewHolder, MainMessage mainMessage) {                    //对对应的View进行赋值                    viewHolder.setText(R.id.item_timer, mainMessage.getTimer());                    viewHolder.setText(R.id.item_sender, mainMessage.getSender());                    viewHolder.setText(R.id.item_title, mainMessage.getTitle());                }                @Override                public int getItemViewType(int position) {                    return super.getItemViewType(position);                }            };            //设置item点击事件            messageRAdapter.setOnItemClick(new CommRecyclerAdapter.OnItemClickListener() {                @Override                public void onItemClick(View view, int position) {                }            });            mRecyclerView.setAdapter(messageRAdapter);            //加动画效果            mRecyclerView.setItemAnimator(new DefaultItemAnimator());


0 0