0.  前言

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

Android开发——RecyclerView特性以及基本使用方法(一)中主要介绍了我们为什么要使用RecyclerView,以及RecyclerView强大的LayoutManager。这篇将主要介绍RecyclerView中的动画效果以及点击事件的处理。本文原创,转载请注明出处为SEU_Calvin的博客

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

系统没有提供ClickListener和LongClickListener,不过我们也可以自己去添加,这里通过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());

这里需要注意的是,如在Android开发——RecyclerView特性以及基本使用方法(一)中显示的那样,notifyDataSetChanged()是没有动画效果的。从效果图中可以看到,RecyclerView可以正常的响应点击事件,和长按删除事件,而且添加和删除事件都是有动画效果的。

源码下载地址点这里

最新文章

  1. android 帧动画,补间动画,属性动画的简单总结
  2. android 加载中、无网络、无数据、出错 四种状态的代码封装
  3. nios II--实验2——led硬件部分
  4. WPF UI虚拟化
  5. JAVA多线程学习3--线程一些方法
  6. 新贵HTML5,2016的发展方向会怎样?
  7. android 双向滑动 seekbar
  8. 微软 Microsoft
  9. Java多线程中wait, notify and notifyAll的使用
  10. SqlMapClient ,SqlExecutor 和SqlMapClientTemplate 的区别?
  11. 用SWF来代替传统的帧动画
  12. 循环执行sql语句
  13. 一个普通的 Zepto 源码分析(二) - ajax 模块
  14. Quartz.NET实现作业调度
  15. react 16 ssr的重构踩坑
  16. LNMP构建动态网站WordPress
  17. linux sshd 登录不需要密码
  18. Oracle高效分页查询(转)
  19. E. Magic Stones CF 思维题
  20. linux下查看CPU、内存、磁盘信息

热门文章

  1. Android逆向 Android平台虚拟机
  2. Python+Selenium笔记(十五)调用JS
  3. 基于MSMQ绑定的WCF服务实现总结
  4. wordpress使用七牛云加速
  5. 将TXT文件 导入 sqlserver数据库
  6. ETL技巧应用(高级应用介绍:准备区运用、 时间戳的运用、日志表的运用、使用调度)
  7. 乘风破浪:LeetCode真题_040_Combination Sum II
  8. 028、HTML 标签2超链接,框架标签
  9. 【Python】【unittest】unittest测试框架中setup,teardown与setupclass,teardownclass的区别
  10. 13.3SolrCloud集群使用手册之Zookeeper指令