添加依赖
implementation 'com.android.support:recyclerview-v7:+'
list.java (主类)
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
final List<Book> data = new ArrayList<>();
for(int i = 0; i < 20; i++) {
Book b = new Book("book"+i,"100");
data.add(b);
}
final MyRecyclerViewAdapter myAdapter = new MyRecyclerViewAdapter<Book>(this, R.layout.item, data) {
@Override
public void convert(MyViewHolder holder, Book s) {
// Colloction是自定义的一个类,封装了数据信息,也可以直接将数据做成一个Map,那么这里就是Map<String, Object>
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 MyRecyclerViewAdapter<T> extends RecyclerView.Adapter<MyViewHolder> {
private List<T> 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 SparseArray<View> views;
private View view;
public MyViewHolder(Context _context, View _view, ViewGroup _viewGroup){
super(_view);
view = _view;
views = new SparseArray<View>();
}
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 extends View> 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
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
列表项xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_marginTop="4dp"
android:background="@android:color/white"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/name"
android:layout_width="100dp"
android:layout_height="match_parent"/>
<TextView
android:id="@+id/price"
android:layout_width="100dp"
android:layout_height="match_parent"/>
</LinearLayout>
数据的类
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;
}
}