zoukankan      html  css  js  c++  java
  • 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 }
    好了,所有代码都贴出来了,运行效果也在之前贴出来了,代码里面注释写的很清楚,大家看一下就可以理解
  • 相关阅读:
    获取微信公众号一键关注链接
    jquery实现静态html文件的include嵌入效果
    前端不为人知的一面 -- 前端冷知识集锦
    [转载]jquery中attr和prop的区别
    【转载】 Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
    关于oracal过程及语句,自己整理避免遗忘 (二)
    关于oracal过程及语句,自己整理避免遗忘 (一)
    关于jq+devexpress基础知识总结(随便的基础)
    字符超出显示长度,用省略号代替的代码
    js+html5 +devexpress属性总结
  • 原文地址:https://www.cnblogs.com/langfei8818/p/5943099.html
Copyright © 2011-2022 走看看