RecyclerView 用例

1. 使用思路

  • 添加 RecyclerView 依赖包
  • 在需要使用的 layoutview 中添加 RecyclerView 控件
  • 如果子视图复杂,写一个 item 的 layout 视图
  • 写一个数据封装实例类 DataBean
  • 写一个适合的 Adapter (继承自 RecyclerView.Adapter)
  • 实例化 RecyclerView 控件,拿到数据集,设置 LayoutManager ,设置 Adapter
  • 设置点击事件

2. RecyclerView 的优点

  • 扩展性非常好
  • 能够轻松实现纵向布局

3. 代码效果图

4. 代码实现

  • 添加依赖

    implementation 'com.android.support:recyclerview-v7:26.1.0'
    
  • MainActivity.java

        package com.demo.thorn.recyclerview;
    
        import android.support.v7.app.AppCompatActivity;
        import android.os.Bundle;
        import android.support.v7.widget.LinearLayoutManager;
        import android.support.v7.widget.RecyclerView;
        import android.util.Log;
    
        import java.util.ArrayList;
    
        public class MainActivity extends AppCompatActivity {
    
            RecyclerView recyclerView;
            private int imgs[] = {R.drawable.img1,R.drawable.img2,R.drawable.img3
                    ,R.drawable.img4,R.drawable.img5,R.drawable.img6
                    ,R.drawable.img7,R.drawable.img8,R.drawable.img9,R.drawable.img10};;
            private ArrayList<TestBean> arrayList;
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                initView();
                initData();
            }
    
            private void initView() {
                recyclerView = findViewById(R.id.rv_show);
                arrayList = new ArrayList<>();
            }
    
            private void initData() {
                for(int i = 0;i<10;i++){
                    TestBean testBean = new TestBean();
                    testBean.setImgId(imgs[i]);
                    testBean.setName("Content Here"+i);
                    arrayList.add(testBean);
                }
                LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
                linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
                recyclerView.setLayoutManager(linearLayoutManager);
                recyclerView.setAdapter(new MyRecyclerViewAdapter(arrayList));
            }
        }
    
  • TestBean.java

    package com.demo.thorn.recyclerview;
    
    public class TestBean {
        private int imgId;
        private  String name;
    
        public int getImgId() {
            return imgId;
        }
    
        public void setImgId(int imgId) {
            this.imgId = imgId;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
  • MyRecyclerViewAdapter.java

    package com.demo.thorn.recyclerview;
    
    import android.support.v7.widget.RecyclerView;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.TextView;
    import java.util.ArrayList;
    
    public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.MyViewHolder> {
    
        ArrayList<TestBean> arrayList;
    
        public MyRecyclerViewAdapter(ArrayList<TestBean> arrayList) {
            this.arrayList = arrayList;
        }
    
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_show,parent,false);
            MyViewHolder myViewHolder = new MyViewHolder(view);
            return myViewHolder;
        }
    
        @Override
        public void onBindViewHolder(final MyViewHolder holder, final int position) {
            final TestBean testBean = arrayList.get(position);
            holder.imageView.setImageResource(testBean.getImgId());
            holder.textView.setText(testBean.getName());
            holder.view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Log.i("jin","Click on"+position);
                }
            });
            holder.textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Log.i("jin","Click on"+testBean.getName());
                }
            });
            holder.imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Log.i("jin","Click on"+testBean.getImgId());
                }
            });
        }
    
        @Override
        public int getItemCount() {
            return arrayList.size();
        }
    
        public class MyViewHolder extends RecyclerView.ViewHolder {
            ImageView imageView;
            TextView textView;
            View view;
    
            public MyViewHolder(View itemView) {
                super(itemView);
                view = itemView;
                imageView = view.findViewById(R.id.iv_head);
                textView = view.findViewById(R.id.tv_content);
            }
        }
    }
    
  • activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.demo.thorn.recyclerview.MainActivity">
    
        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv_show"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </RelativeLayout>
    
  • item_show.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10dp">
    
        <ImageView
            android:id="@+id/iv_head"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_gravity="center_horizontal" />
    
        <TextView
            android:text="defaultText"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="10dp"
            android:id="@+id/tv_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
    

5. 实现瀑布流布局

  • 修改 MainActivity.java 设置的 LayoutManager 即可实现瀑布流布局

    StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(staggeredGridLayoutManager);
    recyclerView.setAdapter(new MyRecyclerViewAdapter(arrayList));
    
  • 效果图如下:

6. 实现网格布局

  • 修改 MainActivity.java 设置的 LayoutManager 即可实现网格布局

    GridLayoutManager gridLayoutManager = new GridLayoutManager(this,3,GridLayoutManager.VERTICAL,false);
    recyclerView.setLayoutManager(gridLayoutManager);
    recyclerView.setAdapter(new MyRecyclerViewAdapter(arrayList));
    
  • 效果图如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值