RecycleView

1.RecycleView简介

Android 5.0 开始,谷歌公司推出了一个用于 大量数据展示的新控件 RecylerView ,可以用来代替
传统的 ListView ,更加强大和灵活。
RecyclerView 是一个强大的滑动组件,与经典的 ListView 相比,同样拥有 item 回收复用的功能,这
一点从它的名字 Recyclerview 即回收 view 也可以看出。
RecyclerView 支持 线性布局 网格布局 瀑布流布局 三种,而且同时还能够控制横向还是纵向滚
动。

2.RecycleView纵向排列

2.1第一步:布局

在住布局中引入RecycleView控件 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"

android:layout_height="match_parent"
android:orientation="vertical"
android:padding="15dp"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rv_v_view"/>
</LinearLayout>

创建编写子项布局

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

    <ImageView
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:id="@+id/iv_icon"/> 
    <TextView
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content"
          android:id="@+id/tv_name"/>

</LinearLayout>

2.2编写代码

        1.编写实体类

        2.创建适配器

        3.在住活动中使用

1.编写实体类

主要看你做的项目来决定  这里是做的是左边显示图片右边显示名字所以就要用到图片ID和名字

AddressBook.java

public class AddressBook { 
    private String name; 
    private int imageId;
 
    public AddressBook(String name, int imageId) { 
        this.name = name; 
        this.imageId = imageId; 

    }
    public String getName() {
         return name; 
    }public int getImageId() { 
        return imageId; 
    } 
}

2.创建适配器

1).创建一个新类:去继承RecyclerView.Adapter,并且将泛型指定为AddressBookAdapter.ViewHolder一开始会报错因为ViewHolder是一个内部类

还没有定义。所以接下来我们就定义内部类。这个内部类的作用主要是通过传入的一个参数 view
从而获取 RecyclerView 子项的最外层布局,然后通过 findViewById() 方法获取控件的实例(在本例
子中获取的是 ImageView TextView )。
2. 定义全局变量 mList ,生成构造函数。 这个构造函数是用来把要展示的数据源(图片、名字)传进
来,并赋值给 mList
3. 重写 onCreateViewHolder() 方法 这个函数主要是用来加载子项布局( addressbook_item ),然后
创建 ViewHolder 实例并把子项布局传入到构造函数中,最后返回 ViewHolder 实例。
4. 重写 onBindViewHolder() 方法 这个方法是用来对传入的子项布局进行赋值的,也就是说当子项布
局被传入进来,是它让布局有了名字、图片。它会在每个布局被滚动到屏幕的时候执行。在本例子
中,是通过 position 参数得到当前项的 AddressBook 实例,然后再把数据设置到 ViewHolder
ImageView TextView 里。
5. 重写 getItemCount() 方法 这个方法主要是用来返回数据源的长度,也就是告诉 RecyclerView 他有多
少个子项
创建 AddressBookAdapter.java
public class AddressBookAdapter extends 
RecyclerView.Adapter<AddressBookAdapter.ViewHolder>{ 
        private List<AddressBook> mList;
 static class ViewHolder extends RecyclerView.ViewHolder{
         ImageView AddressBookImage; 
        TextView AddressBookName; 
    public ViewHolder(@NonNull View view) {
         super(view); 
        AddressBookImage = (ImageView)view.findViewById(R.id.iv_icon);
         AddressBookName = (TextView)view.findViewById(R.id.tv_name); 
        } 
    }
        public AddressBookAdapter(List<AddressBook> mList) {
             this.mList = mList; 
    }
            @NonNull 
            @Override
         public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
             View view=LayoutInflater
                .from(parent.getContext())
                .inflate(R.layout.addressbook_item,paren t,false);

            ViewHolder viewHolder = new ViewHolder(view); 
            return viewHolder; 
        }
            @Override 
            public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
             AddressBook AddressBook = mList.get(position);                             
              holder.AddressBookImage.setImageResource(AddressBook.getImageId());         
             holder.AddressBookName.setText(AddressBook.getName()); 
        }
            @Override 
                public int getItemCount(){ 
                    return mList.size(); 
       } 
}

在活动中使用

1. 获取 RecyclerView 的实例
2. 创建 LinearLayoutManager 对象
3. 创建 AddressBookAdapter 实例
4. 模拟数据
5. 将模拟数据传入 AddressBookAdapter 的构造函数中
6. 调用 setAdapter() 方法完成适配器设置
public class MainActivity extends AppCompatActivity {
        // 模拟从服务器返回的结果数据
        private String [] names = { " 庄周 " , " 花木兰 " , " 刘禅 " , " 猪八戒 " , " 孙悟空 " , " 盘古 " , "
        恬" , " 后羿 " , " 李元芳 " , " 诸葛亮 " };
        private int [] imgs = { R . mipmap . cat , R . mipmap . chameleon , R . mipmap . dog ,
                R . mipmap . owl , R . mipmap . grizzly , R . mipmap . goose , R . mipmap . panda ,                  R . mipmap . parrot ,
                R . mipmap . penguin , R . mipmap . squirrel };
        // 组合的数据存放的地方
                        private List < AddressBook > list = new ArrayList <> ();
                        private RecyclerView rv_v_view ;
                @Override
                protected void onCreate ( Bundle savedInstanceState ) {
                        super . onCreate ( savedInstanceState );
                                setContentView ( R . layout . activity_main );
                        initData ();
                                rv_v_view = findViewById ( R . id . rv_v_view );
                        RecyclerView recyclerView = findViewById ( R . id . rv_v_view );
                //设置布局管理器
                LinearLayoutManager layoutManager = new LinearLayoutManager ( this );
                recyclerView . setLayoutManager ( layoutManager );
                AddressBookAdapter fruitAdapter = new AddressBookAdapter ( list );
                recyclerView . setAdapter ( fruitAdapter );
        }
                private void initData () {
                for ( int i = 0 ; i < names . length ; i ++ ) {
                AddressBook addressBook = new AddressBook ( names [ i ], imgs [ i ]);
                list . add ( addressBook );
                }
        }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值