说明:
RecyclerView 使用好处:无感知刷新,局部刷新,性能提升。
这里是纯净的RecyclerView,有一篇能添加头部的RecyclerView:Android RecyclerView添加Header头部
代码:
0.添加引用
dependencies {
compile 'com.android.support:recyclerview-v7:24.2.1'
}
1.Activity中
private RecyclerView rec_column;
private List<TwoLevelColumnBean> twoLevelColumnBeenList = new ArrayList<TwoLevelColumnBean>();
private SearchHomeColumnAdapter searchHomeColumnAdapter;
---
rec_column = (RecyclerView) findViewById(R.id.rec_column);
---
//LinearLayoutManager 线性布局
LinearLayoutManager layoutmanager = new LinearLayoutManager(getActivity());
layoutmanager.setOrientation(LinearLayoutManager.HORIZONTAL);//列表横向显示
//SearchHomeColumnAdapter Adapter适配器
searchHomeColumnAdapter = new SearchHomeColumnAdapter(twoLevelColumnBeenList) {
@Override
public void setColumn(String column) {
category = column;
refreshLayout.autoRefresh();
searchHomeColumnAdapter.notifyDataSetChanged();
}
};
rec_column.setLayoutManager(layoutmanager);
rec_column.setAdapter(searchHomeColumnAdapter);
- 垂直样式(和ListView相似)设置 :
//LinearLayoutManager 线性布局
LinearLayoutManager layoutmanager = new LinearLayoutManager(getActivity());
layoutmanager.setOrientation(LinearLayoutManager.HORIZONTAL);//列表横向显示
- 左右样式(和GridView相似)设置:
只用把LinearLayoutManager变成GridLayoutManager即可
GridLayoutManager layoutmanager= new GridLayoutManager(context, 4);//4表示4列
- 瀑布流样式(和GridView一样,但是是瀑布流样式)设置:
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); // 两列 瀑布流
2、布局文件xml
<android.support.v7.widget.RecyclerView
android:id="@+id/rec_column"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
3、SearchHomeColumnAdapter Adapter适配器
package briefer.pet.adapter;
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;
import briefer.pet.R;
import briefer.pet.bean.TwoLevelColumnBean;
/**
* 发现-二级栏目
* Created by zst on 2018/4/4.
*/
public abstract class SearchHomeColumnAdapter extends RecyclerView.Adapter<SearchHomeColumnAdapter.ViewHolder> {
private List<TwoLevelColumnBean> list;
private int selectId = 0;
public SearchHomeColumnAdapter(List<TwoLevelColumnBean> list) {
this.list = list;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_search_column, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
holder.tv_column.setText(list.get(position).getColumn());
holder.tv_column.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
selectId = position;
setColumn(list.get(position).getColumn());
}
});
if (position == selectId) {
holder.tv_column.setBackgroundResource(R.drawable.bg_status_check);
} else {
holder.tv_column.setBackgroundResource(R.drawable.bg_status_normal);
}
}
@Override
public int getItemCount() {
return list.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView tv_column;
public ViewHolder(View view) {
super(view);
tv_column = (TextView) view.findViewById(R.id.tv_column);
}
}
public abstract void setColumn(String column);
}
4、适配器布局文件xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_column"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:background="@drawable/bg_status_normal"
android:text="栏目名"
android:textSize="12sp" />
</LinearLayout>
扩展
1、RecyclerView 数据刷新的几种方式
- 刷新全部可见的item,notifyDataSetChanged()
- 刷新指定item,notifyItemChanged(int)
- 从指定位置开始刷新指定个item,notifyItemRangeChanged(int,int)
- 插入、移动一个并自动刷新,notifyItemInserted(int)、notifyItemMoved(int)、notifyItemRemoved(int)
- 局部刷新,notifyItemChanged(int, Object)