初识RecyclerView(二)

我们先来用RecyclerView来实现ListView、GridView的效果,体会它与ListView的不同。

我们先来看一下要实现的效果:

这里写图片描述

这里写图片描述

实现ListView
一、listView的每个Item,我们就用一个简单的String型的字符串来简单代替一下,单个item的布局文件,我就不在给出了,我们来看一下主布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.sanji.myexample.RecycleViewActivity">

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

二、主RecycleViewActivity文件

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

import com.sanji.myexample.adapter.SimpleAdater;
import com.sanji.utils.DividerItemDecoration;

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

import butterknife.Bind;
import butterknife.ButterKnife;

public class RecycleViewActivity extends AppCompatActivity {
    @Bind(R.id.recycleView)
    RecyclerView recyclerView;
    List<String> mData;
    SimpleAdater simpleAdater;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycle_view);
        ButterKnife.bind(this);
        initData();//初始化数据

        simpleAdater = new SimpleAdater(mData, this);
        recyclerView.setAdapter(simpleAdater);

           //设置recycleView的list布局管理样式
        LinearLayoutManager linear = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(linear);
          //设置recycleView的Item分隔线
        recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));

    }

    private void initData() {
        mData = new ArrayList<>();
        for (int i = 'A'; i <= 'z'; i++) {
            mData.add("" + (char) i);
        }
    }
}

从代码中我们可以看到,和我们之前的写法没有什么特别不一样的地方,不同就是有一个专门管理布局的管理器,你可以在代码中灵活的改变布局的样式。

设置Item的分割线,RecyclerView并没有给我们提供这个方法,我们可以用github上流传比较广的一个类DividerItemDecoration来实现,这个类我已经把它上传到我的资源里了,大家有需要的可以下载。

如果你要想实现GridView布局,你可以将list布局换成gridView就可以,很方便灵活

 //设置recycleView的gridView的布局管理样式
 GridLayoutManager grid = new GridLayoutManager(this, 4);
 recyclerView.setLayoutManager(grid);

三、我们主要来看一下 SimpleAdater

public class SimpleAdater extends RecyclerView.Adapter<SimpleAdater .MyViewHolder> {
    private Context mcontext;
    private List<String> mData;
    private LayoutInflater mInflater;

    public SimpleAdater (List<String> mData, Context mcontext) {
        this.mData = mData;
        this.mcontext = mcontext;
        mInflater = LayoutInflater.from(mcontext);

     }

 //创建ViewHolder
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = mInflater.inflate(R.layout.recycleview_item, viewGroup, false);
        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }

//绑定ViewHolder
    @Override
    public void onBindViewHolder(MyViewHolder myViewHolder, int i) {
        myViewHolder.textView.setText(mData.get(i));
    } 
//得到数据的长度
    @Override
    public int getItemCount() {
        return mData.size();
    }
//定义自己的ViewHolder
    class MyViewHolder extends RecyclerView.ViewHolder {
        TextView textView;

        public MyViewHolder(View itemView) {
            super(itemView);
            textView = (TextView) itemView.findViewById(R.id.recycleView_text);
        }
    }
}

RecyclerView强制让我们继承它的ViewHolder,让我们把ViewHolder 的创建和数据的绑定分开来写,实现ViewHolder 的复用。

四、自定义Item分割线

我们可以在style.xml文件里,自定义Item的分割线的样式

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        //自定义Item分割线
        <item name="android:listDivider">@drawable/list_divider</item>
    </style>

list_divider.xml文件设置的是一个渐变样式

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!-- 渐变色的设置  angle:角度设置  -->
    <gradient
        android:angle="45"
        android:centerColor="@color/yello"
        android:endColor="@color/green"
        android:startColor="@color/blue"
        android:type="linear" />
    <size android:height="4dp" />
</shape>

我们可以体会到,RecyclerView在不同布局之间的转换是相对灵活的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值