RecyclerView的使用

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值