Android开发——RecyclerView特性以及基本使用方法(二)

0.  前言

 

随着Android的发展,虽然ListView依旧重要,但RecyclerView确实越来越多的被大家使用。但显然并不能说RecyclerView就一定优于ListView,而是应该根据不同的需求选择最合适的进行使用。本篇将介绍我们为什么要使用RecyclerView,并且它的基本使用方法。

上一篇中,主要介绍了我们为什么要使用RecycleView、及RecyclerView强大的LayoutManager。这篇将主要介绍RecyclerView中的动画效果以及点击事件的处理。

1.  RecyclerView的动画效果和点击事件

系统没有提供ClickListenerLongClickListener,不过我们也可以自己去添加,这里通过adapter中自己去提供回调的方式实现。

Adapter中如下所示:

 public OnItemClickListener itemClickListener;
    public void setOnItemClickListener(OnItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }
    public interface OnItemClickListener {
        void onItemClick(View view, int position);
        void onItemLongClick(View view, int position);
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        public TextView textView;
        public ViewHolder(View itemView) {
            super(itemView);
            textView = (TextView)itemView.findViewById(R.id.id_num);
            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (itemClickListener != null) {
                        itemClickListener.onItemClick(view, getPosition());
                    }
                }
            });
            textView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    if (itemClickListener != null) {
                        itemClickListener.onItemLongClick(view, getPosition());
                    }
                    return true;
                }
            });
        }
}

首先自行提供了点击和长按的接口,并在内部类ViewHolder中对点击事件进行了处理。

Activity中的实现如下:

mAdapter.setOnItemClickListener(new RecyclerAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(final View view, int position) {
                Toast.makeText(MainActivity.this, position + "", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onItemLongClick(View view, int position) {
                mAdapter.removeData(position);
            }
        });

这里简单的单击事件,只是Toast了位置信息,而在长按事件中,则调用了Adapter中的removeData()方法,notifyItemRemoved()方法则对该条目进行了删除,而且是有动画效果的。若有添加数据的需求,也是有对应的方法,即notifyItemInserted(position)

public void removeData(int position) {
        mData.remove(position);
        notifyItemRemoved(position);
    }
    public void addData(int position) {
        mData.add(position, "Insert One");
        notifyItemInserted(position);
    }

当然,需要为RecyclerView进行关于动画的设置:

mRcList.setItemAnimator(newDefaultItemAnimator());

这里需要注意的是,如在上一篇中显示的那样,notifyDataSetChanged()是没有动画效果的。从效果图中可以看到,RecycleView可以正常的响应点击事件、长按事件,而且添加和删除事件都是有动画效果的。源码下载地址点这里http://download.csdn.net/detail/seu_calvin/9720872

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值