RecyclerView的简单使用

RecyclerView 和 Listview 一样都是通过维护少量的View来展示大量的数据,不同的是RecyclerView提供了一种插拔式的体验,高度解耦,同时使用起来更加灵活。
RecyclerView可以通过设置LayoutManager、Oritation、ItemAnimation、ItemDecoration来实现各种效果。
一、LayoutManager主要控制Item的显示方式,用来确定每一个Item如何进行排列摆放,何时展示和隐藏。回收或重用一个View的时候,LayoutManger会像适配器请求新的数据来替换旧的数据,这种机制避免创建过多的View和频繁的调用findViewById方法(和ListView原理类似)
    1、LinearLayoutManager  普通ListView布局列表
    2、GridLayoutManager   GridView布局列表
    3、StaggeredGridLayoutManager  瀑布流布局列表
二、setOritation()设置Item的排列方式是横向还是竖向
三、ItemAnimation设置Item的动画效果默认是有动画效果的
四、ItemDecoration设置Item的分割线,可以自定义
五、Adapter需要继承RecyclerView.Adapter的适配器,目的和BaseAdapter作用类似

RecyclerView的使用:
1、引入RecyclerView依赖包
2、在布局文件中引入RecyclerView
3、Adapter的书写
4、在Activity或Fragment中获取RecyclerView并声明LayoutManager、adapter等相关属性

相关代码:
1、引入依赖包
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:recyclerview-v7:24.0.0-alpha2'
}
2、引入布局文件
<android.support.v7.widget.RecyclerView
android:id="@+id/simpleRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>
3、Adapter的实现
public class RecycleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
/** item 的类型 */
private static final int ITEM_TYPE_HEADER = 0;
private static final int ITEM_TYPE_CONTENT = 1;
private static final int ITEM_TYPE_FOOT = 2;
private Context mContext;
private String [] subjects;
private LayoutInflater mLayoutInflater;
private int mHeaderCount = 1;//头部view的数量
private int mFootCount = 1;//尾部view的数量

public RecycleAdapter(Context mContext, String[] subjects) {
this.mContext = mContext;
this.subjects = subjects;
this.mLayoutInflater = LayoutInflater.from(mContext);
}

/**
* 自定义ViewHold 内容ViewHolder
*/
public static class ContentViewHolder extends RecyclerView.ViewHolder{
public TextView mTextView;
public ContentViewHolder(View itemView) {
super(itemView);
mTextView = (TextView) itemView.findViewById(R.id.subject);
}
}

/**
* HeaderViewHolder
*/
public static class HeaderViewHolder extends RecyclerView.ViewHolder{

public HeaderViewHolder(View itemView) {
super(itemView);
}
}
/**
* FootViewHolder
*/
public static class FootViewHolder extends RecyclerView.ViewHolder{

public FootViewHolder(View itemView) {
super(itemView);
}
}

/**
* 判断当前view是不是HeaderView
* @param position
* @return
*/
public boolean isHeaderView(int position){
return mHeaderCount!=0 && position <mHeaderCount;
}

public boolean isFootView(int position){
return mFootCount!=0 && position >= mHeaderCount + subjects.length;
}

/**
* 当前item的类型
* @param position
* @return
*/
@Override
public int getItemViewType(int position) {
if (mHeaderCount!=0&&position < mHeaderCount){
return ITEM_TYPE_HEADER;
}else if(mFootCount!=0&&position >= mHeaderCount+subjects.length){
return ITEM_TYPE_FOOT;
}else{
return ITEM_TYPE_CONTENT;
}
}

/**
* 创建新view 被LayoutManage所调用
* @param parent
* @param viewType
* @return
*/
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == ITEM_TYPE_HEADER){
return new HeaderViewHolder(mLayoutInflater.inflate(R.layout.item_recycle_header, parent, false));
}else if (viewType == ITEM_TYPE_CONTENT){
return new ContentViewHolder(mLayoutInflater.inflate(R.layout.item_recyclerview, parent, false));
}else if (viewType == ITEM_TYPE_FOOT){
return new FootViewHolder(mLayoutInflater.inflate(R.layout.item_recycle_header,parent,false));
}
return null;
// View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recyclerview,parent,false);
// ContentViewHolder contentViewHolder = new ContentViewHolder(view);
// return contentViewHolder;
}

/**
* 绑定数据
* @param holder
* @param position
*/
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ContentViewHolder){
((ContentViewHolder)holder).mTextView.setText(subjects[position - mHeaderCount]);
}else if(holder instanceof FootViewHolder){

}else if(holder instanceof HeaderViewHolder){

}
}

/**
* item 数量
* @return
*/
@Override
public int getItemCount() {
return subjects.length + mHeaderCount + mFootCount;
}
}
4、在Activity中获取RecyclerView
        initView();
mLayoutManager = new LinearLayoutManager(this);
gridLayoutManager = new GridLayoutManager(this,3);
mLayoutManager.setOrientation(LinearLayout.VERTICAL);
// mRecyclerview.setLayoutManager(mLayoutManager);
mRecyclerview.setLayoutManager(gridLayoutManager);
mAdapter = new RecycleAdapter(this,subjects);
mRecyclerview.setAdapter(mAdapter);
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return (mAdapter.isHeaderView(position) || mAdapter.isFootView(position)) ? gridLayoutManager.getSpanCount() : 1;
}
});
}

private void initView() {
mRecyclerview = (RecyclerView) findViewById(R.id.simpleRecyclerView);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RecycleView是一种在Android中常用的列表控件,它允许你在列表中显示大量数据,而不会导致应用程序变得卡顿或崩溃。它使用了一个称为“回收利用”的概念,这意味着当列表不再需要时,它可以将某些元素从内存中释放出来,以节省内存空间。 以下是使用RecycleView的一些基本步骤: 1. 添加依赖项:首先,你需要在你的项目中添加一个recyclerView的依赖项。如果你使用的是Gradle构建系统,可以在build.gradle文件中添加以下代码: ```groovy dependencies { implementation 'com.android.support:recyclerview-v7:28.0.0' // 使用最新版本 } ``` 2. 创建布局文件:在你的布局文件中创建一个新的recyclerView布局文件。这个文件应该包含一个或多个用于显示数据的视图。 3. 创建适配器:适配器是连接recyclerView和数据源的关键组件。你需要创建一个适配器类,该类继承自RecyclerView.Adapter,并实现其中的一些接口方法。 4. 绑定适配器:最后,你需要将适配器绑定到recyclerView上。这通常在Activity或Fragment的onCreate方法中完成。你可以使用setAdapter方法将适配器绑定到recyclerView上。 以下是一个简单的示例代码,演示如何使用RecycleView: 1. 在布局文件中添加一个recyclerView: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` 2. 在Activity或Fragment中创建一个RecyclerViewAdapter: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private List<String> data; // 数据源 public MyAdapter(List<String> data) { this.data = data; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_item_layout, parent, false); return new MyViewHolder(view); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.textView.setText(data.get(position)); } @Override public int getItemCount() { return data.size(); } public static class MyViewHolder extends RecyclerView.ViewHolder { private TextView textView; // 自定义视图组件 public MyViewHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.textView); // 获取自定义视图组件并设置文本 } } } ``` 3. 在Activity或Fragment的onCreate方法中绑定适配器: ```java RecyclerView recyclerView = findViewById(R.id.recyclerView); MyAdapter adapter = new MyAdapter(myData); // myData是数据源,例如一个List<String>对象 recyclerView.setAdapter(adapter); // 将适配器绑定到recyclerView上 ``` 这就是使用RecycleView的基本步骤。你可以根据需要自定义布局和适配器,以适应你的应用程序需求。RecycleView提供了许多高级功能,如自动布局、可点击边距等,可以根据需要进行配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值