RecyclerView实现ListView功能

本文介绍了如何使用RecyclerView替代ListView,重点讲述了RecyclerView的基本使用、Item点击监听、添加headView和footView的方法。通过设置适配器和ViewHolder,实现ListView类似的功能,并提供了一种使用SwipeRefreshLayout实现下拉刷新,通过viewType添加上拉加载更多的代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RecyclerView作为ListView的学习

RecylcerView是MD新增的控件,他可以有效替换ListView,GridView,因为他提供了高度的解耦,灵活,插拔式的使用体验,本文主要总结他作为ListView使用的知识

1.基本使用

首先配置gradle,引入RecyclerView

  compile 'com.android.support:appcompat-v7:24.0.0'
  compile 'com.android.support:design:24.0.0'

然后在布局中添加RecyclerView,在代码中对其进行使用,其中适配器继承于RecyclerView.Adapter,适配器中使用的ViewHolder继承于RecyclerView.ViewHolder,使用非常方便。基础使用函数如下:

mRecyclerView =(RecyclerView) findViewById(R.id.recycler_list_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));//布局管理
mRecyclerView.setAdapter(new ListViewAdapter()); //适配器 

mRecyclerView.setItemAnimator(new DefaultItemAnimator()); //增加,删除动画
mRecyclerView.addItemDecoration(new DividerItemDecoration()); //分割线

2.RecyclerView的Item中的控件的点击监听

因为RecyclerView没有像ListView一样带有setOnItemClickListener(),所以需要我们自己在adapter去定义onClickListener,有两个定义监听接口的方式,一种是直接在adapter中监听,由RecyclerView实现对应处理;一种是定义在ViewHoder中监听,在adapter中监听到以后再由adapter中的监听接口传给RecyclerView。

这两种点击监听要视情况使用,如果只是对整体的itenView进行监听,就可以使用第一种,但是如果是对ItemView中的组件进行监听和对应处理,则用第二种,通常使用第二种的场景多一点。

若使用第二种,先在ViewHolder中创建监听接口

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView tv;
    Button btn;

    public ViewHolder(View itemView) {
        super(itemView);
        tv = (TextView) itemView.findViewById(R.id.show_tv);
        btn = (Button) itemView.findViewById(R.id.delete_btn);
        tv.setOnClickListener(this);
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.show_tv:
                mListener.showBtn(getPosition());
                break;
            case R.id.delete_btn:
                mListener.deleteItem(getPosition());
                break;
            default:
                break;
        }
    }

    interface IViewHolderClicks {

        void showBtn(int position);

        void deleteItem(int position);
    }

    IViewHolderClicks mListener;

    public void setIViewHolderClicks(IViewHolderClicks listener) {
        mListener = listener;
    }
}

然后在Adapter中实现接口,并做对应的处理,就可完成点击列表文字出现按钮,点击按钮删除对应位置item

@Override
   public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
       View view = LayoutInflater.from(mContext).inflate(R.layout.list_iten, parent, false);
       ViewHolder holder = new ViewHolder(view);
       holder.setIViewHolderClicks(this);
       return holder;
   }

   @Override
   public void onBindViewHolder(ViewHolder holder, int position) {

       holder.tv.setText(mList.get(position) + "");
       if (position == mLastPosition) {
           holder.btn.setVisibility(View.VISIBLE);
       } else {
           holder.btn.setVisibility(View.GONE);
       }
   }

   @Override
   public int getItemCount() {
       return mList.size();
   }

   @Override
   public void showBtn(int position) {
       mLastPosition = position;
       notifyDataSetChanged();
   }

   @Override
   public void deleteItem(int position) {
       mLastPosition = -1;
       mList.remove(position);
       notifyItemRemoved(position);
       }

3.为作为ListView的RecyclerView添加headView和footView

添加下拉刷新可以通过使用v4提供的SwipeRefreshLayout组件实现功能,也可以通过设置viewtype来实现添加headview。

添加上拉加载更多,则是通过添加footview,配合public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 函数中通过设置viewtype来实现。

4.代码实例

实现功能:通过SwipeRefreshLayout实现下拉刷新,添加footview通过viewType判断实现上拉加载更多。

源码地址:RecyclerListView

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值