说明:
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);
GridView设置:
只用把LinearLayoutManager变成GridLayoutManager即可
GridLayoutManager layoutmanager= new GridLayoutManager(context, 4);//4表示4列
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)