android RecylerView的用法

来源:互联网 发布:民族证券开户知乎 编辑:程序博客网 时间:2024/06/03 14:58

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());
设置这个的目的增加删除动画,这是默认动画,当然也可以自己编辑动画



0 0