本文共 4044 字,大约阅读时间需要 13 分钟。
添加依赖
implementation 'com.android.support:recyclerview-v7:+'
list.java (主类)
RecyclerView recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); final Listdata = new ArrayList<>(); for(int i = 0; i < 20; i++) { Book b = new Book("book"+i,"100"); data.add(b); } final MyRecyclerViewAdapter myAdapter = new MyRecyclerViewAdapter (this, R.layout.item, data) { @Override public void convert(MyViewHolder holder, Book s) { // Colloction是自定义的一个类,封装了数据信息,也可以直接将数据做成一个Map,那么这里就是Map TextView name = holder.getView(R.id.name); name.setText(s.getBookName()); TextView price = holder.getView(R.id.price); price.setText(s.getBookPrice()); } }; recyclerView.setAdapter(myAdapter);
自定义Adapter
public abstract class MyRecyclerViewAdapterextends RecyclerView.Adapter { private List data; private Context context; private int layout; public abstract void convert(MyViewHolder holder, T t); public MyRecyclerViewAdapter(Context _context, int _layoutId, List _data) { data = _data; context = _context; layout = _layoutId; } public int getItemCount() { return data.size(); } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { MyViewHolder holder = MyViewHolder.get(context, parent, layout); return holder; } @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { convert(holder, data.get(position)); // convert函数需要重写 holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { data.remove(position); notifyDataSetChanged();// notifyItemRemoved(position);// notifyItemRangeChanged(position, getItemCount()); Toast.makeText(context, "删除"+position, Toast.LENGTH_SHORT).show(); } });// holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {// @Override// public boolean onLongClick(View view) {// data.remove(position);// notifyDataSetChanged();// Toast.makeText(context, "删除"+position, Toast.LENGTH_SHORT).show();// return false; // true 表示已经完整地处理了事件,不希望其他回调方法再处理// }// }); }}
自定义ViewHolder
public class MyViewHolder extends RecyclerView.ViewHolder{ private SparseArrayviews; private View view; public MyViewHolder(Context _context, View _view, ViewGroup _viewGroup){ super(_view); view = _view; views = new SparseArray (); } public static MyViewHolder get(Context _context, ViewGroup _viewGroup, int _layoutId) { View _view = LayoutInflater.from(_context).inflate(_layoutId, _viewGroup, false); MyViewHolder holder = new MyViewHolder(_context, _view, _viewGroup); return holder; } public T getView(int _viewId) { View _view = views.get(_viewId); if (_view == null) { // 创建view _view = view.findViewById(_viewId); // 将view存入views views.put(_viewId, _view); } return (T)_view; }}
主xml
列表项xml
数据的类
public class Book { private String bookName; private String bookPrice; public Book(String bookName, String bookPrice) { this.bookName = bookName; this.bookPrice = bookPrice; } public String getBookName() { return bookName; } public String getBookPrice() { return bookPrice; } public void setBookName(String bookName) { this.bookName = bookName; } public void setBookPrice(String bookPrice) { this.bookPrice = bookPrice; }}
转载地址:http://zwwob.baihongyu.com/