RecycleView入门级别使用(一)

无关紧要的前言

几个月没有碰Android了,但是不能丢下,RecycleView全忘了,作为百度程序员,记录一下吧

优点

  1. 灵活性强
  2. 可拓展性高
  3. 轻松实现水平、垂直、网格、瀑布流布局

缺点

  1. 点击事件需要自己写

使用

1. 添加依赖

 compile 'com.android.support:recyclerview-v7:21.0.+'

2.xml引入

<android.support.v7.widget.RecyclerView 
android:id="@+id/recyclerView" 
android:layout_height="match_parent" 
android:layout_width="match_parent" />

3.item书写

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="哈哈"
        android:gravity="center"
        android:padding="20dp"
        />
    <!--不够优雅的实现分割线-->
    <View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="#ff00ff"/>

</LinearLayout>

敲黑板:最外层布局height一定不能是match(会只显示一个item的后果)

4.最难的adapter

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    private Context context;//上下文
    private List<String> list;//接收的值

    private OnItemClickListener onItemClickListener;

    //构造方法;用来传递值
    public MyAdapter(Context context ,List<String > list){
        this.context = context;
        this.list = list;
    }

    //点击事件回调接口
    public interface OnItemClickListener{
        void onItemClick(View view,int position);
    }

    //为点击方法设置方法,传输对象
    public void setOnItemClickListener(OnItemClickListener onItemClickListener){
        this.onItemClickListener = onItemClickListener;
    }

    //获取有几条数据
    @Override
    public int getItemCount() {
        return list.size();
    }

    //创建一个ViewHolder并返回,ViewHolder必须有一个带有View的构造函数,这个View就是我们Item的根布局
    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_recycleview,parent,false);//引入根布局
        MyViewHolder mvh = new MyViewHolder(view);//传入viewholder此布局,用于获取控件
        return mvh;
    }

    // 创建的ViewHolder,继承自RecyclerView.ViewHolder
    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView name;

        public MyViewHolder(View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.name);//获取组件
        }
    }

    //将数据与界面进行绑定操作,简单来说,就是给item赋值
    @Override
    public void onBindViewHolder(final MyAdapter.MyViewHolder holder, final int position) {
        holder.name.setText(list.get(position));//赋值
        //为组件添加点击事件
        holder.name.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    onItemClickListener.onItemClick(holder.name,position);
                }
        });
    }
}

5.Activity调用

终于要结束了!!!
设置数据

        //构造数据
        for (int i = 0; i < 10; i++) {
            list.add("疾风剑豪" + i);
        }

最终操作

 LinearLayoutManager llm = new LinearLayoutManager(this);//创建线性布局管理器
 llm.setOrientation(LinearLayoutManager.VERTICAL);//设置垂直滑动
 recycleView.setLayoutManager(llm);//给recycleview设置布局
 MyAdapter ma = new MyAdapter(this, list);//调用构造方法传递list
 recycleView.setAdapter(ma);//设置适配器

点击事件的实现

 ma.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(MainActivity.this, list.get(position), Toast.LENGTH_SHORT).show();
            }
  });

基本结束了!

6.其他布局格式

上面展示的是垂直滑动,还有其他的呢?
1. 水平滚动,只需修改一句话

llm.setOrientation(LinearLayoutManager.HORIZONTAL);

2 .网格布局,一句话,当然要把线性布局管理器删除掉,加上

recyclerView.setLayoutManager(new GridLayoutManager(this, 2)); //Grid视图

3.瀑布流,同样把线性布局管理器删除掉,加上

recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, OrientationHelper.VERTICAL));

基本就这些了。打完收工

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值