RecyclerView的简单使用

来源:互联网 发布:撕衣服软件下载 编辑:程序博客网 时间:2024/05/22 01:44
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
原创粉丝点击