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