一、RecycleView的使用
1、纵向列表
//泛型指定为MyAdapter的内部类
class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{
List<String> list = new ArrayList<>();
public MyAdapter(List<String> list){
this.list = list;
}
//继承于RecyclerView.ViewHolder
class ViewHolder extends RecyclerView.ViewHolder{
TextView textView;
//构造中传入一个view的参数
ViewHolder(View view){
super(view);
textView = (TextView) view.findViewById(R.id.textView2);
}
}
//创建一个ViewHolder实例,将布局view传入其构造中
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_recyler_item,parent,false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
//子item的数量
@Override
public int getItemCount() {
return list.size();
}
//对子item数据进行赋值
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.textView.setText(list.get(position));
}
}
2、横向列表recyclerView = (RecyclerView)findViewById(R.id.id_recycler); //用于指定RecyclerView的布局方式,这里指定线性布局 recyclerView.setLayoutManager(new LinearLayoutManager(this)); MyAdapter adapter = new MyAdapter(list); recyclerView.setAdapter(adapter);
3、网格列表LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); recyclerView.setLayoutManager(linearLayoutManager);
4、瀑布流GridLayoutManager gridLayoutManager = new GridLayoutManager(this,4);//第二个参数为列数 recyclerView.setLayoutManager(gridLayoutManager);
二、BaseAdapter//第一个参数为列数,第二个为排列方向 StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL); recyclerView.setLayoutManager(manager);
1、设置点击监听
2、继承于ViewHolder/** * RecyclerView 点击条目的监听 */ public interface OnItemClickListener<T> { void onItemClick(ViewGroup parent, View view,T t, int position); }
3、BaseAdapterpublic class ViewHolder extends RecyclerView.ViewHolder { private SparseArray<View> mViews; private Context mContext; private View mConverView; public ViewHolder(Context context, View itemView) { super(itemView); mContext=context; mConverView = itemView; mViews = new SparseArray<View>(); } //创建ViewHolder实例 public static ViewHolder get(Context context,ViewGroup parent,int layoutId){ View itemView = LayoutInflater.from(context).inflate(layoutId,parent,false); ViewHolder holder = new ViewHolder(context,itemView); return holder; } //获取组件 public <T extends View> T getView(int viewId){ View view = mViews.get(viewId); if (view==null){ view = mConverView.findViewById(viewId); mViews.put(viewId,view); } return (T)view; } //TextView设置文字 public ViewHolder setText(int viewId, String text){ TextView tv = getView(viewId); tv.setText(text); return this; } //TextView设置颜色 public ViewHolder setText(int viewId, int textColor){ TextView tv = getView(viewId); tv.setTextColor(textColor); return this; } //ImageView设置图片 public ViewHolder setImageResource(int viewId, int resId){ ImageView view = getView(viewId); view.setImageResource(resId); return this; } //ImageView设置图片 public ViewHolder setImageResource(int viewId, String imageUrl){ ImageView view = getView(viewId); //抽取出网络图片加载的工具类 BaseImageUtil.ImageLoader(mContext,imageUrl,view); return this; } //ImageView设置背景 public ViewHolder setBackgroundColor(int viewId, int color) { View view = getView(viewId); view.setBackgroundColor(color); return this; } //是否可见 public ViewHolder setVisible(int viewId, boolean visible) { View view = getView(viewId); view.setVisibility(visible ? View.VISIBLE : View.GONE); return this; } //item内控件点击事件 public ViewHolder setOnClickListener(int viewId, View.OnClickListener listener){ View view = getView(viewId); view.setOnClickListener(listener); return this; } //获取converview public View getConverView(){ return mConverView; } }
public abstract class BaseAdapter<T> extends RecyclerView.Adapter<ViewHolder> { protected Context mContext; protected List<T> mDatas; //数据源 private int mLayoutId; protected OnItemClickListener mOnItemClickListener; //点击监听 public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.mOnItemClickListener = onItemClickListener; } public BaseAdapter(Context context , int layoutId){ mContext = context; mLayoutId = layoutId; } public BaseAdapter(Context context, int layoutId, List<T> datas){ mContext = context; mDatas = datas; mLayoutId = layoutId; } @Override public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) { final ViewHolder holder = ViewHolder.get(mContext,parent,mLayoutId); setClickListener(parent, holder); return holder; } //设置点击事件 protected void setClickListener(final ViewGroup parent, final ViewHolder holder) { //设置监听 holder.getConverView().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mOnItemClickListener!=null){ int position = holder.getAdapterPosition(); mOnItemClickListener.onItemClick(parent,v,mDatas.get(position),position); } } }); } @Override public void onBindViewHolder(ViewHolder holder, int position) { convert(holder,mDatas.get(position),position); } @Override public int getItemCount() { if (mDatas!=null&&mDatas.size()>0){ return mDatas.size(); } return 0; } /** * 必须要实现的查找控件和赋值的操作 * @param holder * @param t 数据 * @param position 索引 */ public abstract void convert(ViewHolder holder, T t, int position); //设置数据源 public void setData(List<T> datas){ mDatas = datas; } //清除所有数据 public void removeAll(){ if (mDatas!=null){ mDatas.clear(); } } //添加数据 public void addDatas(List<T> newDatas){ if (mDatas!=null){ mDatas.addAll(newDatas); } } }