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 }
好了,所有代码都贴出来了,运行效果也在之前贴出来了,代码里面注释写的很清楚,大家看一下就可以理解