RecyclerView的使用
来源:互联网 发布:郑州平面设计美工培训 编辑:程序博客网 时间:2024/06/16 13:47
RecyclerView是非常灵活的,通过导入support-v7包对其进行使用,通过设置它提供的不同LayoutManager,ItemDecoration,ItemAnimator实现各种效果
<1>通过设置LayoutManager来控制其显示方式
<2>通过ItemDecoration绘制Item的间隔
<3>通过ItemAnimator控制item增删的动画
<4>控制Item的点击监听,需要自行定义
<5>实现分页加载
<6>多布局
recyclerView = ((RecyclerView) view.findViewById(R.id.evaluat_recyclerView)); //初始化RecyclerView管理者 RecyclerView.LayoutManager manager=new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false); //给RecyclerView设置管理者 recyclerView.setLayoutManager(manager);
实现分页加载
//RecyclerView的滚动监听,监听是否滑到底部 recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); //停止滑动 if(newState==RecyclerView.SCROLL_STATE_IDLE){ //获取RecyclerView的管理者 RecyclerView.LayoutManager manager=recyclerView.getLayoutManager(); int lastPosition=-1; //如果是线性布局管理者,获取管理者的最后一条可视Item的位置 if(manager instanceof LinearLayoutManager){ lastPosition=((LinearLayoutManager) manager).findLastVisibleItemPosition(); } else if(manager instanceof GridLayoutManager){ //如果是网格布局管理者,获取管理者的最后一条可视Item的位置 lastPosition=((GridLayoutManager) manager).findLastVisibleItemPosition(); }else if(manager instanceof StaggeredGridLayoutManager){ //如果是流式布局管理者,获取管理者的最后显示Item,由于流式布局的特殊性,所以得到的是一个数组 int[] lastPositions=new int[((StaggeredGridLayoutManager) manager).getSpanCount()]; //比较数组,选择最大的Item ((StaggeredGridLayoutManager) manager).findLastVisibleItemPositions(lastPositions); lastPosition=findMax(lastPositions); } //如果得到的最后一条Item的位置与ItemCount-1相等,则表示滑动到最后了,进行网络请求,刷新适配器 if(lastPosition==recyclerView.getLayoutManager().getItemCount()-1){ //加载更多数据 initData(list.get(list.size()-1).getId()); } } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); } });
private int findMax(int[] lastPositions){ //找出流式布局中,最大的位置 int max=lastPositions[0]; for (int i = 0; i < lastPositions.length; i++) { if(max<lastPositions[i]){ max=lastPositions[i]; } } return max; }
将数据显示在RecyclerView上,点击item进行跳转
private void getAdapter(final List<PictrueBean> list){ //如果adapter为空,则实例化,并给RecyclerView设置adapter,否则刷新adapter if(adapter==null){ adapter=new PictrueAdapter(list, getActivity(), new PictrueAdapter.OnItemClickListener() { @Override public void onItemClickListener(View view, int position) { Intent intent=new Intent(getActivity(), NewsDetailActivity.class); intent.putExtra("id",list.get(position).getId()); intent.putExtra("title",list.get(position).getTitle()); startActivity(intent); } }); recyclerView.setAdapter(adapter); }else{ adapter.notifyDataSetChanged(); } }
实现多布局的adapter
public class PictrueAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private List<PictrueBean> list; private Context context; private LayoutInflater inflater; private OnItemClickListener onItemClickListener; public PictrueAdapter(List<PictrueBean> list, Context context, OnItemClickListener onItemClickListener) { this.list = list; this.context = context; inflater = LayoutInflater.from(context); this.onItemClickListener = onItemClickListener; } //设置监听 public interface OnItemClickListener { void onItemClickListener(View view, int position); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = null; RecyclerView.ViewHolder viewHolder = null; //判断是哪种样式,加载哪种布局 switch (viewType) { case 0: view = inflater.inflate(R.layout.pictrue_adapter_layout, parent, false); viewHolder = new MyViewHolder(view); break; case 1: view = inflater.inflate(R.layout.pictrue_item_layout, parent, false); viewHolder = new MyViewHolder2(view); break; } return viewHolder; } @Override public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { //判断不同的样式,显示不同的内容 if(holder instanceof MyViewHolder) { ((MyViewHolder) holder).tvTitle.setText(list.get(position).getTitle()); ((MyViewHolder) holder).tvCount.setText(list.get(position).getImgcount()); ((MyViewHolder) holder).tvComment.setText(list.get(position).getReviewcount() + ""); Picasso.with(context).load(list.get(position).getBigimgsrc()).error(R.drawable.default_news).into(((MyViewHolder) holder).iv); }else if(holder instanceof MyViewHolder2) { ((MyViewHolder2)holder).tvTitle.setText(list.get(position).getTitle()); ((MyViewHolder2)holder).tvCount.setText(list.get(position).getImgcount()); ((MyViewHolder2)holder).tvComment.setText(list.get(position).getReviewcount()+""); String img=list.get(position).getSmallimgsrc(); String[] imgs=img.split("\\|"); Picasso.with(context).load(imgs[0]).error(R.drawable.default_news).into(((MyViewHolder2) holder).iv1); Picasso.with(context).load(imgs[1]).error(R.drawable.default_news).into(((MyViewHolder2) holder).iv2); Picasso.with(context).load(imgs[2]).error(R.drawable.default_news).into(((MyViewHolder2) holder).iv3); } //设置点击item监听 if (onItemClickListener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int pos = holder.getLayoutPosition(); onItemClickListener.onItemClickListener(holder.itemView, pos); } }); } } //设置不用的样式 @Override public int getItemViewType(int position) { if (position % 2 == 0) { return 0; } else { return 1; } } @Override public int getItemCount() { return list == null ? 0 : list.size(); } class MyViewHolder extends RecyclerView.ViewHolder { ImageView iv; TextView tvTitle, tvComment, tvCount; public MyViewHolder(View itemView) { super(itemView); iv = ((ImageView) itemView.findViewById(R.id.pictrue_iv)); tvComment = ((TextView) itemView.findViewById(R.id.pictrue_comment)); tvTitle = ((TextView) itemView.findViewById(R.id.pictrue_title)); tvCount = ((TextView) itemView.findViewById(R.id.pictrue_count)); }}class MyViewHolder2 extends RecyclerView.ViewHolder { ImageView iv1,iv2,iv3; TextView tvTitle, tvComment, tvCount; public MyViewHolder2(View itemView) { super(itemView); iv1 = ((ImageView) itemView.findViewById(R.id.pictrue_item_iv1)); iv2= ((ImageView) itemView.findViewById(R.id.pictrue_item_iv2)); iv3 = ((ImageView) itemView.findViewById(R.id.pictrue_item_iv3)); tvComment = ((TextView) itemView.findViewById(R.id.pictrue_item_comment)); tvTitle = ((TextView) itemView.findViewById(R.id.pictrue_item_title)); tvCount = ((TextView) itemView.findViewById(R.id.pictrue_item_count)); }}}
多布局的xml文件
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="13dp" android:layout_marginRight="13dp" android:layout_marginTop="5dp"><TextView android:id="@+id/pictrue_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="#000"/> <ImageView android:id="@+id/pictrue_iv" android:layout_width="match_parent" android:layout_height="120dp" android:layout_below="@+id/pictrue_title" android:layout_marginTop="5dp" android:layout_marginBottom="5dp" android:scaleType="fitXY"/> <TextView android:id="@+id/pictrue_comment" android:layout_below="@+id/pictrue_iv" android:drawableRight="@mipmap/comment_icon" android:layout_width="wrap_content" android:layout_alignParentRight="true" android:layout_height="wrap_content" android:layout_marginLeft="10dp" /> <TextView android:layout_toLeftOf="@+id/pictrue_comment" android:id="@+id/pictrue_count" android:layout_below="@+id/pictrue_iv" android:drawableRight="@mipmap/img_num" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/color" android:layout_marginTop="5dp" android:layout_below="@id/pictrue_comment" /></RelativeLayout>
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="13dp" android:layout_marginRight="13dp" android:layout_marginTop="5dp"> <TextView android:id="@+id/pictrue_item_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="#000" android:textSize="18sp" /> <LinearLayout android:layout_below="@+id/pictrue_item_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="5dp" android:id="@+id/pictrue_ll"> <ImageView android:id="@+id/pictrue_item_iv1" android:layout_width="0dp" android:layout_weight="1" android:layout_height="120dp" android:layout_marginRight="5dp" android:scaleType="fitXY" /> <ImageView android:id="@+id/pictrue_item_iv2" android:layout_width="0dp" android:layout_weight="1" android:layout_height="120dp" android:layout_marginRight="5dp" android:scaleType="fitXY" /> <ImageView android:id="@+id/pictrue_item_iv3" android:layout_width="0dp" android:layout_weight="1" android:layout_height="120dp" android:scaleType="fitXY" /></LinearLayout> <TextView android:id="@+id/pictrue_item_comment" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_below="@+id/pictrue_ll" android:layout_marginTop="5dp" android:drawableRight="@mipmap/comment_icon" /> <TextView android:id="@+id/pictrue_item_count" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/pictrue_ll" android:layout_marginTop="5dp" android:layout_toLeftOf="@+id/pictrue_item_comment" android:drawableRight="@mipmap/img_num" android:layout_marginRight="10dp"/> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_below="@id/pictrue_item_comment" android:layout_marginTop="5dp" android:background="@color/color" /></RelativeLayout>
0 0
- RecyclerView+RecyclerView.Adapter+RecyclerView.ViewHolder的使用
- RecyclerView的使用
- RecyclerView的使用
- RecyclerView 的使用详解
- RecyclerView的基本使用
- RecyclerView的使用
- Android -- RecyclerView的使用
- RecyclerView的使用
- CardView,RecyclerView的使用
- 关于RecyclerView的使用
- RecyclerView的使用
- RecyclerView的使用(一)
- PopupWindow + RecyclerView的使用
- RecyclerView的简单使用
- RecyclerView 的简单使用
- recyclerview的使用
- RecyclerView的使用记录
- Android RecyclerView的使用
- Linux系统下如何查看及修改文件读写权限
- 国王的魔镜
- Java基础--基础语法1
- Linux 终端下 dstat 监控工具
- Java基础--基础语法2
- RecyclerView的使用
- Java基础--面向对象1
- Java基础--面向对象2
- Java基础--关于static的变量和方法使用的一些不解
- Java基础--面向对象3
- Java基础--面向对象4
- Java基础--异常处理
- 数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)
- Java基础--数组