Android开发之滚动控件RecyclerView

概述

今天是初次接触到这个RecyclerView,对她的唯一的感觉就是爱不释手哈!绝对是“一用倾人城,再用倾人国”的,根本停不下来的呢!简直甩ListView几条街的存在,接下来让我们一睹芳容吧!

基本使用

先来个简单的例子过下手!

第一步

增加依赖包

    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha7'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:percent:26.0.0-alpha1'
    compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'

第二步

xml中引入控件

<android.support.v7.widget.RecyclerView
    android:id="@+id/RecyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    ></android.support.v7.widget.RecyclerView>

第三步

建立布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/list_image"
        android:layout_width="50sp"
        android:layout_weight="1"
        android:layout_marginTop="3sp"
        android:layout_marginBottom="3sp"
        android:layout_height="50sp"
        android:src="@drawable/icecream01"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="icecream01"
        android:layout_gravity="center"
        android:gravity="center"
        />
</LinearLayout>

看下我们可爱的冰淇淋,哈哈,你是不是也饿了?
这里写图片描述

第四步

建立一个Icecream类

package sangxin.recyclerview;

/**
 * Created by Administrator on 2017/7/14 0014.
 */

public class Icecream {
    int Ice_image;
    String Ice_name;
    public  Icecream(int Ice_image,String Ice_name){
        this.Ice_image=Ice_image;
        this.Ice_name=Ice_name;
    }

    public void setIce_image(int ice_image) {
        Ice_image = ice_image;
    }

    public void setIce_name(String ice_name) {
        Ice_name = ice_name;
    }

    public int getIce_image() {
        return Ice_image;
    }

    public String getIce_name() {
        return Ice_name;
    }
}

第五步

用过ListView的童鞋肯定清楚,如果要优化加载速度肯定离不开一个叫做ViewHolder的东东,回头有时间在详细讲一下ViewHolder,今天我们先用着。
再建立一个用于优化的类!这个类的主要作用是通过IceViewHold的构造方法方法,用view找到image和text的id,以便下步使用。

package sangxin.recyclerview;


import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * Created by Administrator on 2017/7/14 0014.
 */

public class IceViewHold extends RecyclerView.ViewHolder {
    ImageView imageView;
    TextView textView;

    public IceViewHold(View itemView) {
        super(itemView);
        imageView=itemView.findViewById(R.id.list_image);
        textView=itemView.findViewById(R.id.list_textView);
    }
}

第六步

为我们的RecyclerView建立一个Adapter,告诉你个小秘密我们的RecycleView有我们自己的Adapter。来看看吧!

package sangxin.recyclerview;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.List;

/**
 * Created by Administrator on 2017/7/14 0014.
 */

public class IceCreamAdapter extends RecyclerView.Adapter<IceViewHold>{
    private List<Icecream> icelist;

    public  IceCreamAdapter(List<Icecream> list){
        this.icelist=list;
    }


    @Override
    public IceViewHold onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.icecream_list_item,parent,false);
        IceViewHold iceViewHold =new IceViewHold(view);
        return iceViewHold;
    }

    @Override
    public void onBindViewHolder(IceViewHold holder, int position) {
        Icecream icecream = icelist.get(position);
        holder.imageView.setImageResource(icecream.getIce_image());
        holder.textView.setText(icecream.getIce_name());
    }

    @Override
    public int getItemCount() {
        return icelist.size();
    }
}

第七步

终于回到主Activity了!我们来看下代码和运行效果吧!

package sangxin.recyclerview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity_RecyclerView extends AppCompatActivity {
    List<Icecream> ice_list ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.recycler_view);
        ice_list=new ArrayList<Icecream>();
        AddDate();
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.RecyclerView);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivity_RecyclerView.this);

        IceCreamAdapter iceCreamAdapter = new IceCreamAdapter(ice_list);

        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setAdapter(iceCreamAdapter);
    }

    void AddDate(){
        Icecream icecream01 = new Icecream(R.drawable.icecream01,"冰淇淋01");
        ice_list.add(icecream01);
        Icecream icecream02 = new Icecream(R.drawable.icecream02,"冰淇淋02");
        ice_list.add(icecream02);
        Icecream icecream03 = new Icecream(R.drawable.icecream03,"冰淇淋03");
        ice_list.add(icecream03);
        Icecream icecream04 = new Icecream(R.drawable.icecream04,"冰淇淋04");
        ice_list.add(icecream04);
        Icecream icecream05 = new Icecream(R.drawable.icecream05,"冰淇淋05");
        ice_list.add(icecream05);
        Icecream icecream06 = new Icecream(R.drawable.icecream06,"冰淇淋06");
        ice_list.add(icecream06);
        Icecream icecream07 = new Icecream(R.drawable.icecream07,"冰淇淋07");
        ice_list.add(icecream07);
        Icecream icecream08 = new Icecream(R.drawable.icecream08,"冰淇淋08");
        ice_list.add(icecream08);
        Icecream icecream09 = new Icecream(R.drawable.icecream09,"冰淇淋09");
        ice_list.add(icecream09);
        Icecream icecream10 = new Icecream(R.drawable.icecream10,"冰淇淋10");
        ice_list.add(icecream10);
        Icecream icecream11 = new Icecream(R.drawable.icecream11,"冰淇淋11");
        ice_list.add(icecream11);
        Icecream icecream12 = new Icecream(R.drawable.icecream12,"冰淇淋12");
        ice_list.add(icecream12);
        Icecream icecream13 = new Icecream(R.drawable.icecream13,"冰淇淋13");
        ice_list.add(icecream13);
        Icecream icecream14 = new Icecream(R.drawable.icecream14,"冰淇淋14");
        ice_list.add(icecream14);
        Icecream icecream15 = new Icecream(R.drawable.icecream15,"冰淇淋15");
        ice_list.add(icecream15);
        Icecream icecream16 = new Icecream(R.drawable.icecream16,"冰淇淋16");
        ice_list.add(icecream16);
        Icecream icecream17 = new Icecream(R.drawable.icecream17,"冰淇淋17");
        ice_list.add(icecream17);
        Icecream icecream18 = new Icecream(R.drawable.icecream18,"冰淇淋18");
        ice_list.add(icecream18);
        Icecream icecream19 = new Icecream(R.drawable.icecream19,"冰淇淋19");
        ice_list.add(icecream19);
        Icecream icecream20 = new Icecream(R.drawable.icecream20,"冰淇淋20");
        ice_list.add(icecream20);

    }
}

先看下这个界面,我们再开始下一步的工作!
这里写图片描述


第八步:分析一下

关于有时候,recyclerview会越滚越长的原因,这个很好解决,看看自己的item布局里面的,height全部改为wrap_content就OK了!

猜你喜欢

转载自blog.csdn.net/qq_27865227/article/details/75123272