android RecylerView的用法

RecylerView是support-v7包中的新布局,类似ListView也是一个可以显示集合的布局。

RecylerView顾名思义,是一个可以回收的布局,实际上就是集合布局复用view

虽然设置稍微复杂一点,但是它能实现的功能很强大

简答来说,它既可以当作listview用也可以当gridview用


我们来看一下怎么用它

首先 在gradle中添加编译依赖

compile 'com.android.support:recyclerview-v7:24.2.1'

之后就可以正常使用了

在布局中添加

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.by.recyleviewtest.MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:id="@+id/button"
        android:text="Button"/>

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


</LinearLayout>

在代码中获取并设置相关参数

<span style="white-space:pre">	</span>RecyclerView view = (RecyclerView) findViewById(R.id.recylerview);
        view.setLayoutManager(new LinearLayoutManager(this));
        adapter = new MyRecylerviewAdapter(getLayoutInflater(), list);
        view.setAdapter(adapter);

设置LayoutManager是设置RecylerView显示的布局,这里设置的是线性布局

也就是设置RecylerView横向或纵向排列分布

Adapter需要我们自己来写,继承自RecylerView.Adapter

 

public class MyRecylerviewAdapter extends RecyclerView.Adapter<MyRecylerviewAdapter.ViewHolder> {


    private List<String> list;
    private LayoutInflater inflater;

    public MyRecylerviewAdapter(LayoutInflater inflater, List<String> list) {
        this.inflater = inflater;
        this.list = list;
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.recylerview_item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.textView.setText(list.get(position));
    }

    @Override
    public int getItemCount() {
        return list == null ? 0 : list.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {

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

    }

}


adapter和BaseAdapter不同

需要自己实现三个方法,getItemCount, onBindViewHolder,onCreateViewHolder

getItemCount是获取要显示的view的个数

onBindViewHolder和onCreateViewHolder共同实现了BaseAdapter中的getView方法的功能,

严格来讲还要RecyclerViewHolder算进来

onCreateViewHolder是创建ViewHolder,获取要显示的Item的布局,并传递给ViewHolder

ViewHolder用来绑定控件

onBindViewHolder实现ViewHolder中控件的显示要显示的东西

像我上面那么写,就是很简单的实现了


每个Item显示的布局也很简单,只有一个TextView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="8dp">

    <TextView
        android:text="TextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView"
        android:layout_gravity="center_horizontal"/>

</LinearLayout>

这样写完,就实现了基本的ListView显示列表的功能



我们来看看,我们还有什么可以设置的

 <span style="white-space:pre">	</span>LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        view.setLayoutManager(layoutManager);

这样设置就是横向的效果了


在来设置一下GridView的显示效果


        GridLayoutManager layoutManager = new GridLayoutManager(this, 3);
        view.setLayoutManager(layoutManager);



是不是挺厉害的,不用改其他东西,就这么改一下,就能实现不同的显示方式

这还只是setLayoutManager

我们来看一下其他设置

view.setItemAnimator(new DefaultItemAnimator());
设置这个的目的增加删除动画,这是默认动画,当然也可以自己编辑动画



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LO嘉嘉VE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值