首页 > 学院 > 开发设计 > 正文

使用此Adapter,代码量可大大减少

2019-11-09 15:34:29
字体:
来源:转载
供稿:网友
public class MultiItemTypeAdapter<T> extends RecyclerView.Adapter<ViewHolder> { PRotected Context mContext; protected List<T> mDatas; protected ItemViewDelegateManager mItemViewDelegateManager; protected OnItemClickListener mOnItemClickListener; public MultiItemTypeAdapter(Context context, List<T> datas) { mContext = context; mDatas = datas; mItemViewDelegateManager = new ItemViewDelegateManager(); } @Override public int getItemViewType(int position) { if (!useItemViewDelegateManager()) return super.getItemViewType(position); return mItemViewDelegateManager.getItemViewType(mDatas.get(position), position); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { ItemViewDelegate itemViewDelegate = mItemViewDelegateManager.getItemViewDelegate(viewType); int layoutId = itemViewDelegate.getItemViewLayoutId(); ViewHolder holder = ViewHolder.createViewHolder(mContext, parent, layoutId); onViewHolderCreated(holder,holder.getConvertView()); setListener(parent, holder, viewType); return holder; } public void onViewHolderCreated(ViewHolder holder,View itemView){ } public void convert(ViewHolder holder, T t) { mItemViewDelegateManager.convert(holder, t, holder.getAdapterPosition()); } protected boolean isEnabled(int viewType) { return true; } protected void setListener(final ViewGroup parent, final ViewHolder viewHolder, int viewType) { if (!isEnabled(viewType)) return; viewHolder.getConvertView().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mOnItemClickListener != null) { int position = viewHolder.getAdapterPosition(); mOnItemClickListener.onItemClick(v, viewHolder , position); } } }); viewHolder.getConvertView().setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { if (mOnItemClickListener != null) { int position = viewHolder.getAdapterPosition(); return mOnItemClickListener.onItemLongClick(v, viewHolder, position); } return false; } }); } @Override public void onBindViewHolder(ViewHolder holder, int position) { convert(holder, mDatas.get(position)); } @Override public int getItemCount() { int itemCount = mDatas.size(); return itemCount; } public List<T> getDatas() { return mDatas; } public MultiItemTypeAdapter addItemViewDelegate(ItemViewDelegate<T> itemViewDelegate) { mItemViewDelegateManager.addDelegate(itemViewDelegate); return this; } public MultiItemTypeAdapter addItemViewDelegate(int viewType, ItemViewDelegate<T> itemViewDelegate) { mItemViewDelegateManager.addDelegate(viewType, itemViewDelegate); return this; } protected boolean useItemViewDelegateManager() { return mItemViewDelegateManager.getItemViewDelegateCount() > 0; } public interface OnItemClickListener { void onItemClick(View view, RecyclerView.ViewHolder holder, int position); boolean onItemLongClick(View view, RecyclerView.ViewHolder holder, int position); } public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.mOnItemClickListener = onItemClickListener; }}

======================================================================

public abstract class CommonAdapter<T> extends MultiItemTypeAdapter<T>{ protected Context mContext; protected int mLayoutId; protected List<T> mDatas; protected LayoutInflater mInflater; public CommonAdapter(final Context context, final int layoutId, List<T> datas) { super(context, datas); mContext = context; mInflater = LayoutInflater.from(context); mLayoutId = layoutId; mDatas = datas; addItemViewDelegate(new ItemViewDelegate<T>() { @Override public int getItemViewLayoutId() { return layoutId; } @Override public boolean isForViewType( T item, int position) { return true; } @Override public void convert(ViewHolder holder, T t, int position) { CommonAdapter.this.convert(holder, t, position); } }); } protected abstract void convert(ViewHolder holder, T t, int position);}

======================================================================

@Override protected void initView() { mAdapter = new CommonAdapter<MeetingVo>(mBaseContext, R.layout.item_meeting, mMeetingVos) { @Override protected void convert(ViewHolder holder, MeetingVo meetingVo, int position) { holder.setText(R.id.tv_name, meetingVo.getTheme()); holder.setText(R.id.tv_address, meetingVo.getAddress()); holder.setText(R.id.tv_time, DateUtil.transferLongToDate("yyyy-MM-dd HH:mm:ss", meetingVo.getTime())); if (position == getItemCount() - 1) { holder.setImageResource(R.id.iv_divider, R.drawable.divider_gray); } else { holder.setImageResource(R.id.iv_divider, R.drawable.divider_white_gray); } holder.getConvertView().setOnClickListener(v -> { Intent intent = new Intent(mContext, MeetingDetailActivity.class); intent.putExtra("meetingVo", meetingVo); intent.putExtra("source", mSource); mContext.startActivity(intent); }); } }; mRecyclerView.setLayoutManager(new LinearLayoutManager(mBaseContext)); mRecyclerView.setAdapter(mAdapter ); }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表