RecyclerView的简单使用
RecycleView简介
官方对RecyclerView的描述是
A flexible view for providing a limited window into a large data set.
RecycleView是在有限的窗口中大量显示数据集的灵活view
RecyclerView是support.v7包中的控件,可以说是ListView和GridView的增强升级版,个人觉得可以替代ListView
可以实现
- ListView的功能(包括横向)
- GridView的功能
- 横向ScrollView
- 瀑布流
- 方便添加animation
RecyclerView高度解耦,随意定制。它提供的LayoutManager,ItemDecoration,ItemAnimator可以让开发者自定义奇特的效果,
但是RecyclerView的点击方法是需要自己实现的
基本的使用方法
gradle导包
compile 'com.android.support:recyclerview-v7:23.4.0'
在layout布局文件中加入
<android.support.v7.widget.RecyclerView
android:id="@+id/recycle_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
OnCreate中几个关键函数
//设置布局管理器,必须
mRecyclerView.setLayoutManager(layout);
//设置RecycleView的Adapter,必须
mRecyclerView.setAdapter(adapter)
//设置分割线,非必须
mRecyclerView.addItemDecoration(ItemDecoration);
//设置item的增删动画,非必须
mRecyclerView.setItemAnimator(animator);
新建布局recycleview_item,以TextView为根节点
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recycle_textview"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:text="TEXT"
android:textSize="20sp"/>
新建一个RecyclerView.Adapter适配器MyRecycleViewAdapter
package edu.fjnu.birdie.demo;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
/**
* Created by edge0 on 2017/5/17.
*/
public class MyRecycleViewAdapter extends RecyclerView.Adapter<MyRecycleViewAdapter.MyViewHolder> {
private Context mContext;
private List<String> mList;
public MyRecycleViewAdapter(Context context, List<String> list) {
this.mContext = context;
this.mList = list;
}
@Override
public MyRecycleViewAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//此处动态加载ViewHolder的布局文件并返回holder
View view = LayoutInflater.from(mContext).inflate(R.layout.recycleview_item, parent, false);
MyViewHolder mHolder = new MyViewHolder(view);
return mHolder;
}
@Override
public void onBindViewHolder(MyRecycleViewAdapter.MyViewHolder holder, int position) {
//此处设置Item中view的数据
holder.mTextView.setText(mList.get(position));
}
@Override
public int getItemCount() {
//生成的item的数量
return mList.size();
}
//Item的ViewHolder
// item内部布局控件的id绑定
class MyViewHolder extends RecyclerView.ViewHolder{
TextView mTextView;
public MyViewHolder(View itemView) {
super(itemView);
mTextView = (TextView) itemView.findViewById(R.id.recycle_textview);
}
}
}
Activity中OnCreate中加入
RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recycle_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
initData();//简单的初始化数据
//实例化并传输数据给adapter
MyRecycleViewAdapter mAdapter = new MyRecycleViewAdapter(getApplicationContext(), list);
mRecyclerView.setAdapter(mAdapter);
一些其他设置
RecyclerView的点击事件
一开始说到RecyclerView需要我们自己实现点击事件
因为他没有没有提供类似setOnItemClickListener()这样的注册监听器方法
所以我们自己给子项view注册响应事件
我们只需要在Adapter的onBindViewHolder方法里添加
public void onBindViewHolder(MyRecycleViewAdapter.MyViewHolder holder,final int position) {
holder.mTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mContext, "item"+position,Toast.LENGTH_SHORT).show();
}
});
}
RecycleView的强大之处也在这里,就算是ViewHolder里的View多层嵌套了几个view都可以轻松的实现点击事件
Item间分割线
- 只要在item的layout里加上
android:layout_marginTop="3dp"
2.使用ItemDecoration
详细的使用方法参考这篇文章:
RecyclerView之ItemDecoration由浅入深
这里就不加赘述,这篇文章写的非常清楚
主要就是对列表的分割线进行自定义,功能非常丰富
Item显示方式
GridLayout
只需要将 layoutManager
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
改为
GridLayoutManager layoutManager = new GridLayoutManager(this,3);
就可以实现3列的网格布局
瀑布流
同上 修改layoutManager为StaggeredGrid
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));
以上就是RecyclerView的简单使用
RecyclerView还有很多其他的用法
比如
- 高级效果 波纹点击
添加 删除时动画
与某些View结合使用
滑动监听addOnScrollListener 可实现下拉刷新等
ItemTouchHelper实现item删除,互相拉动
有兴趣的同学可以自己去查询资料
上一篇: Glide教程1-4
下一篇: 冒泡排序