android:RecycleView的简单封装使用
Posted FightSeeker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android:RecycleView的简单封装使用相关的知识,希望对你有一定的参考价值。
本文主要简单的介绍一下最最简单的RecycleView的使用方法。首先说一下具体的类所起的作用:
BaseRecycleView.java:一个抽象类直接继承在RecyclerView,在内部实现了item的点击,长按,以及设置emptyView的功能,其中点击和长按实现了状态切换的功能,state_pressed.并对外开放了两个抽象接口getLayoutManger()和getItemDecoration(),分别是设置LayoutManger和分割线的。
BaseRecyleAdapter.java:一个继承在RecyclerView.Adapter的泛型抽象类,对外开放了3个抽象的方法
getItemLayoutId():设置item的布局
convertCreateViewHolder(View itemView):viewHolder与ietemView绑定
convertBindViewHolder(MyViewHolder viewHolder, int position):把对象中的内容展示出来,和listviewgetView一个功能
BaseViewHolder.java:一个继承在RecyclerView.ViewHolder的抽象类,简单的实现了view的保存与获取功能
FlexDividerDecoration.java:分割线设置,对外开放Builder,通过设置Builder中的参数,来绘制不同的分割线,暂时提供,drawable,color,paint三种绘制方式。
FinalRecycleView.java:继承子BaseRecycleView,具体的RecycleView实现,重写了getLayoutManger()与getItemDecoration()方法。可以在xml布局中自由配置显示的LayoutManger的style以及分割线。具体的配置属性值如下:
<declare-styleable name="FinalRecycleView">
<attr name="showStyle" format="enum"><!-- 显示形式,list or grid -->
<enum name="LISTVIEW_VERTICAL" value="0" />
<enum name="LISTVIEW_HORIZONTAL" value="1" />
<enum name="GRIDVIEW_NORMAL" value="2" />
<enum name="STAGGERED_HORIZONTAL" value="3" />
<enum name="STAGGERED_VERTICAL" value="4" />
</attr>
<attr name="gridSpanCount" format="integer"/> <!-- grid列数 -->
<attr name="innerDivider" format="reference"/>
<attr name="innerDividerWidth" format="dimension"/>
</declare-styleable>
下面主要说一下FinalRecycleView的具体使用方法:
1.xml布局文件如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:final="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.seeker.weight.super_recycleView.FinalRecycleView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
final:showStyle="LISTVIEW_VERTICAL"
final:gridSpanCount="4"
final:innerDivider="@drawable/color_line"
final:innerDividerWidth="1dp"/>
<include layout="@layout/empty"/>
</RelativeLayout>
其中empty布局的设置如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/emptyView"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Nothing"
android:textSize="30sp"
android:gravity="center"
android:textColor="@android:color/black"/>
</LinearLayout>
2.MyAdapter.java文件写法:
package com.seeker.SuperRecycleview;
import java.util.List;
import android.content.Context;
import android.view.View;
import com.seeker.weight.super_recycleView.BaseRecyleAdapter;
public class MyAdapter extends BaseRecyleAdapter<String,MyViewHolder>
public MyAdapter(Context context, List<String> datas)
super(context, datas);
@Override
public int getItemLayoutId()
return R.layout.item;
@Override
public MyViewHolder convertCreateViewHolder(View itemView)
return new MyViewHolder(itemView);
@Override
public void convertBindViewHolder(MyViewHolder viewHolder, int position)
viewHolder.setText(R.id.item_text, mDatas.get(position));
写法很简单,就是回调三个接口,返回item布局,绑定viewholder,以及设置文字展示等。
3.MyViewHolder.java文件写法:
package com.seeker.SuperRecycleview;
import android.view.View;
import android.widget.TextView;
import com.seeker.weight.super_recycleView.BaseViewHolder;
/**
* Created by Seeker on 2016/7/19.
*/
public class MyViewHolder extends BaseViewHolder
public MyViewHolder(View view)
super(view);
/**
* 为TextView设置字符串
* @param viewId
* @param text
* @return
*/
public MyViewHolder setText(int viewId, String text)
TextView view = getView(viewId);
if(view != null && text != null)
view.setText(text);
return this;
新加了一个方法,就是setText,给TextView设置文字展示。
4.在MainActivity.java中具体用法如下:
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (FinalRecycleView) findViewById(R.id.recyclerview);
final List<String> list = new ArrayList<>();
final MyAdapter myAdapter = new MyAdapter(this, list);
mRecyclerView.setAdapter(myAdapter);
View empty = findViewById(R.id.emptyView);
empty.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
for (int i = 0; i < 52; i++)
list.add(""+i);
myAdapter.notifyDataSetChanged();
);
mRecyclerView.setEmptyView(empty);
mRecyclerView.setOnItemClickListener(new BaseRecycleView.OnItemClickListener()
@Override
public void onItemClick(View itemView, int position)
Toast.makeText(MainActivity.this, "click:" + list.get(position), Toast.LENGTH_SHORT).show();
);
mRecyclerView.setOnLongClickListener(new BaseRecycleView.OnLongItemClickListener()
@Override
public void onLongItemClick(View itemView, int position)
Toast.makeText(MainActivity.this, "longClick:"+list.get(position), Toast.LENGTH_SHORT).show();
);
首先是获取FinalRecycleView的实例对象,然后就是设置Adapter,设置emptyView,设置点击事件以及长按事件。点击事件和长按事件中,简单的Toast一下文字内容。
其中,一开始的时候,list中数据为空,在empty点击之后list数据填充,并调用myAdapter.notifyDataSetChanged();刷新界面。下面看一下效果图:
效果图很明显了,实现empty的显示,以及点击长按的功能,并且点击长按状态也发生响应的变化。
5.具体的方法使用就是那样,现在再说一下,其它的。
设置不同的分割线:在FinalRecycleView中,改写方法getItemDecoration()即可。如当前想显示分割线颜色为红色,大小为2的,代码设置如下:
@Override
public ItemDecoration getItemDecoration()
return new FlexDividerDecoration.Builder(getContext())
.setColor(Color.RED)
.setSize(2)
.build();
效果图如下:
drawable图片也可以设置:如下
@Override
public ItemDecoration getItemDecoration()
return new FlexDividerDecoration.Builder(getContext())
.setDrawableResId(R.drawable.divider)
.setSize(2)
.build();
效果图就不贴了。
6.设置显示样式,我想显示gridview并且是4列,则在xml中布局改为如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:final="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.seeker.weight.super_recycleView.FinalRecycleView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
final:showStyle="GRIDVIEW_NORMAL"
final:gridSpanCount="4"
final:innerDivider="@drawable/color_line"
final:innerDividerWidth="1dp"/>
<include layout="@layout/empty"/>
</RelativeLayout>
则效果图如下:
到这就为止了,RecycleView简单的封装就是这样,只是简化了使用步骤,用起来更像我们熟悉的ListView和GridView罢了。
RecycleView下载链接地址,RecycleView下载链接地址,RecycleView下载链接地址,RecycleView下载链接地址
以上是关于android:RecycleView的简单封装使用的主要内容,如果未能解决你的问题,请参考以下文章
[Android] Android RecycleView和ListView 自定义Adapter封装类
自己封装的工具类,使用原生SwipeRefreshLayout+RecycleView实现下拉刷新和加载更多