很早之前,看到zhy写的万能ListViewAdapter,并且写了篇博客万能Adapter。
现在RecyclerView已经逐渐替代了ListView。而RecyclerView的Adapter写起来又比ListView的Adapter要复杂一些,于是我边仿照之前,写了一个RecyclerView的万能Adapter。
使用方法:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(OrientationHelper. VERTICAL); recyclerView.setLayoutManager(layoutManager); List<Integer> list = new ArrayList<>(); for(int i = 0; i < 100; i++){ list.add(i); } recyclerView.setAdapter(new CommonRecyclerViewAdapter<Integer>(this, list, R.layout.item) { @Override public void convert(RecyclerViewHolder holder, Integer item, int position) { holder.setText(R.id.text, item + ""); } }); } }
这样子是不是简单了很多。。。
下面直接贴出代码,一个也就两个类:
CommonRecyclerViewAdapter:
public abstract class CommonRecyclerViewAdapter<T> extends RecyclerView.Adapter<RecyclerViewHolder>{ public interface OnItemClickListener { void onItemClick (View view, int position); } public interface OnItemLongClickListener { void onItemLongClick (View view, int position); } private LayoutInflater mInflater; protected Context mContext; private List<T> mData; private final int mItemLayoutId; private OnItemClickListener mOnItemClickListener; private OnItemLongClickListener mOnItemLongClickListener; public CommonRecyclerViewAdapter(Context context, List<T> data, int itemLayoutId) { this.mContext = context; this.mInflater = LayoutInflater.from(mContext); this.mItemLayoutId = itemLayoutId; this.mData = data; } public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.mOnItemClickListener = onItemClickListener; } public void setmOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) { this.mOnItemLongClickListener = onItemLongClickListener; } @Override public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new RecyclerViewHolder(mInflater.inflate(mItemLayoutId, parent, false), mOnItemClickListener, mOnItemLongClickListener); } @Override public void onBindViewHolder(RecyclerViewHolder holder, int position) { convert(holder, mData.get(position), position); } @Override public int getItemCount(){ return mData.size(); } public abstract void convert(RecyclerViewHolder holder, T item, int position); }
RecyclerViewHolder:
public class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,View.OnLongClickListener{ private final SparseArray<View> mViews; private View mItemView; private CommonRecyclerViewAdapter.OnItemClickListener mOnItemClickListener; private CommonRecyclerViewAdapter.OnItemLongClickListener mOnItemLongClickListener; public RecyclerViewHolder(View itemView, CommonRecyclerViewAdapter.OnItemClickListener onItemClickListener, CommonRecyclerViewAdapter.OnItemLongClickListener onItemLongClickListener){ super(itemView); this.mItemView = itemView; this.mOnItemClickListener = onItemClickListener; this.mOnItemLongClickListener = onItemLongClickListener; this.mViews = new SparseArray<>(); } @Override public void onClick(View v) { if(mOnItemClickListener != null){ mOnItemClickListener.onItemClick(v,getLayoutPosition()); } } @Override public boolean onLongClick(View v) { if(mOnItemLongClickListener != null){ mOnItemLongClickListener.onItemLongClick(v,getLayoutPosition()); } return true; } private <T extends View> T getView(int id){ View item = mViews.get(id); if(item == null){ item = mItemView.findViewById(id); mViews.put(id, item); } return (T) item; } public RecyclerViewHolder setText(int id, CharSequence text){ TextView textView = getView(id); textView.setText(text); return this; } public RecyclerViewHolder setTextColor(int id, int color){ TextView textView = getView(id); textView.setTextColor(color); return this; } public RecyclerViewHolder setBackground(int id, int drawable){ View view = getView(id); view.setBackground(ContextCompat.getDrawable(mItemView.getContext(), drawable)); return this; } }
要使用的人直接复制这两个类即可。
GItHub下载地址:https://github.com/xiaoqiAndroid/CommonRecyclerViewAdapter