博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓recycleview
阅读量:2394 次
发布时间:2019-05-10

本文共 4044 字,大约阅读时间需要 13 分钟。

添加依赖

implementation 'com.android.support:recyclerview-v7:+'

list.java (主类)

RecyclerView recyclerView = findViewById(R.id.recyclerView);        recyclerView.setLayoutManager(new LinearLayoutManager(this));        final List
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
(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 MyRecyclerViewAdapter
extends 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 SparseArray
views; 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/

你可能感兴趣的文章
深入Python多进程编程基础
查看>>
深入理解RPC——RPC在企业服务中的核心价值
查看>>
跋山涉水 —— 深入 Redis 字典遍历
查看>>
如何解决Java线程池队列过饱问题
查看>>
Lettuce快速入门
查看>>
轻量级框架Spark快速入门
查看>>
蚂蚁金服RPC框架结构分析
查看>>
eclipse踩坑Order and Export引发java.lang.NoClassDefFoundErrorFailed resolution of
查看>>
Video Telephony笔记
查看>>
SMTP验证
查看>>
POP/IMAP-before-SMTP
查看>>
Eclipse 快捷键
查看>>
怎样在同一终端上多帐号登陆同一服务器?
查看>>
BiteFight 简单外挂开发之IE篇
查看>>
SVN常用命令学习笔记
查看>>
Avoiding memory leaks
查看>>
AT Command for QOS
查看>>
中文字号VS英文字号(磅)VS像素值的对应关系
查看>>
关于@override报错的问题
查看>>
Linux中禁止Ctrl-Alt-Delete
查看>>