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
原创粉丝点击