当前位置: 首页 > news >正文

Android学习笔记——ListView升级版--RecyclerView控件

RecyclerView是一个比ListView更灵活的一个控件,以后可以直接抛弃ListView了。具体好在哪些地方,往下看就知道了。

首先我们来使用RecyclerView来实现ListView的效果,一个滚动列表,先看下效果图,唯一有一点就是他不带点击事件,需要自己写,

这里还写了点击效果,因为RecyclerView不带点击事件,所以到自己写,

下面把代码贴出来

先贴出Adapter代码

Myadapter.java
 1  2 
 3 package com.wuxianedu.mimixun;
 4 
 5 import android.content.Context;
 6 import android.support.v7.widget.RecyclerView;
 7 import android.view.LayoutInflater;
 8 import android.view.View;
 9 import android.view.ViewGroup;
10 import android.widget.Button;
11 
12 import java.util.List;
13 
14 /**
15  * Created by Administrator on 2016/10/9.
16  */
17 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
18     private Context context;
19     private List<String>list;
20     private SetRoot setRoot;
21 
22     public MyAdapter(Context context,List<String>list){
23         this.list = list;
24         this.context = context;
25     }
26     //实例,new一个SetRoot setRoot的实例,才能保证   private SetRoot setRoot,不空指针
27     public void setOnRecyclerViewItemViewListener(SetRoot setRoot){
28         this.setRoot = setRoot;
29     }
30 
31     /**
32      * 返回布局
33      * @param parent
34      * @param viewType
35      * @return
36      */
37     @Override
38     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
39         View view = LayoutInflater.from(context).inflate(R.layout.item_id,parent,false);
40         return new ViewHolder(view);
41     }
42 
43     /**
44      * 给控件赋值
45      * @param holder
46      * @param position
47      */
48     @Override
49     public void onBindViewHolder(ViewHolder holder, int position) {
50         String listt = list.get(position);
51         holder.button.setText(listt);
52         //给下面的position赋值
53         holder.setPosition(position);
54     }
55     @Override
56     public int getItemCount() {
57         return list.size();
58     }
59 
60     /**
61      * new 一个ViewHolder
62      *
63      */
64     class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
65         Button button;
66         private int position;
67         public ViewHolder(View itemView) {
68             super(itemView);
69             button = (Button) itemView.findViewById(R.id.but_id);
70             button.setOnClickListener(this);
71            // itemView.setOnClickListener(this);
72             itemView.setOnLongClickListener(this);
73         }
74 
75         public void setPosition(int position) {
76             this.position = position;
77         }
78         @Override
79         public void onClick(View v) {
80             /**
81              * 调用setRoot里面的方法来传参,this,是本身,position是当前的下标
82              * 这样才能保证用户点击item的时候显示对应的position
83              */
84             setRoot.setOnClickListener(this,position);
85         }
86 
87         @Override
88         public boolean onLongClick(View v) {
89             /**
90              * 调用setRoot里面的方法来传参,this,是本身,position是当前的下标
91              * 这样才能保证用户点击item的时候显示对应的position
92              */
93             setRoot.setOnLongClickListener(this,position);
94             return true;
95         }
96     }
97 }

 

实现点击事件的接口

SetRoot.java
 1 package com.wuxianedu.mimixun;
 2 
 3 import android.support.v7.widget.RecyclerView;
 4 
 5 /**
 6  * Created by Administrator on 2016/10/9.
 7  */
 8 public interface SetRoot {
 9     /**
10      * 点击事件
11      * @param viewHolder
12      * @param position
13      */
14     void setOnClickListener(RecyclerView.ViewHolder viewHolder, int position);
15     /**
16      * 长按事件
17      * @param viewHolder
18      * @param position
19      */
20     void setOnLongClickListener(RecyclerView.ViewHolder viewHolder,int position);
21 }

最后贴上MainActivity.java

 1 package com.wuxianedu.mimixun;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.support.v7.widget.DefaultItemAnimator;
 6 import android.support.v7.widget.LinearLayoutManager;
 7 import android.support.v7.widget.RecyclerView;
 8 import android.widget.Toast;
 9 
10 import java.util.ArrayList;
11 import java.util.List;
12 
13 public class MainActivity extends Activity {
14 
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_main);
19         RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rv_id);
20         //接收数据源
21         List<String> list = getFor();
22         MyAdapter myAdapter =new MyAdapter(this,list);
23         recyclerView.setAdapter(myAdapter);
24         //点击事件
25         myAdapter.setOnRecyclerViewItemViewListener(new SetRoot() {
26             //这里的position得到的就是当前点击所对应的值,因为在Adapter中已经赋值
27             @Override
28             public void setOnClickListener(RecyclerView.ViewHolder viewHolder, int position) {
29                 Toast.makeText(MainActivity.this,"你点击了:"+position,Toast.LENGTH_SHORT).show();
30             }
31 
32             @Override
33             public void setOnLongClickListener(RecyclerView.ViewHolder viewHolder, int position) {
34                 Toast.makeText(MainActivity.this,"你长按了:"+position,Toast.LENGTH_SHORT).show();
35             }
36         });
37         //布局显示
38         recyclerView.setLayoutManager(new LinearLayoutManager(this));
39         //添加动画
40         recyclerView.setItemAnimator(new DefaultItemAnimator());
41 
42     }
43 
44     private List<String> getFor(){
45         List<String> list = new ArrayList<>();
46         for (int i = 0;i<120;i++){
47             String str = "惠涛"+i;
48             list.add(str);
49         }
50         return list;
51     }
52 }
好了,所有代码都贴出来了,运行效果也在之前贴出来了,代码里面注释写的很清楚,大家看一下就可以理解

转载于:https://www.cnblogs.com/langfei8818/p/5943099.html

相关文章:

  • ArcGIS中的WKID
  • 开始ruby
  • git 命令
  • 2014.8.27 CAD数据结构
  • 股指期货的交割日般是每月哪一天
  • Python学习文档指引
  • 身份验证无法登录
  • OpenStack 镜像制作之cloud-init
  • Ubuntu开启ssh服务(14.04)
  • IntelliJ IDEA中JAVA连接MYSQL
  • Python 类之 “属性(property ) 详解
  • SMR磁盘学习12---drivemanaged SMR 磁盘总结
  • 打造自己的 DockerImage
  • 实用的60个CSS代码片段
  • Node项目之评分系统(二)- 数据库设计
  • crontab执行失败的多种原因
  • E-HPC支持多队列管理和自动伸缩
  • gitlab-ci配置详解(一)
  • Java|序列化异常StreamCorruptedException的解决方法
  • java中的hashCode
  • PaddlePaddle-GitHub的正确打开姿势
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 面试总结JavaScript篇
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 区块链技术特点之去中心化特性
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 我是如何设计 Upload 上传组件的
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 【干货分享】dos命令大全
  • Python 之网络式编程
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • # C++之functional库用法整理
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #pragma data_seg 共享数据区(转)
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • #在 README.md 中生成项目目录结构
  • (11)MATLAB PCA+SVM 人脸识别
  • (6)设计一个TimeMap
  • (C语言)球球大作战
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (十) 初识 Docker file
  • (算法)求1到1亿间的质数或素数
  • . NET自动找可写目录
  • .NET 4.0中的泛型协变和反变
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET导入Excel数据
  • .net经典笔试题
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • @PreAuthorize注解