RecyclerView是一种更强大的滚动控件,相比ListView,他不需要使用一些技巧提高运行效率,还能实现横向滚动等优点。

  • 依赖库

因为Google 2018 IO 大会推出了 Android新的扩展库 AndroidX,用于替换原来的 Android扩展库,将原来的android.*替换成androidx.*;只有包名和Maven工件名受到影响,原来的类名,方法名和字段名不会更改,详情看我的上一篇博客Android到Androidx的变迁

在Android 9及之前需要添加以下内容

implementation 'com.android.support:recyclerview-v7:24.2.1'

在Android 10 需要添加

implementation 'androidx.recyclerview:recyclerview:1.1.0'
  • 基本用法

新建一个Fruit类

package com.syc.androidlearning.listViewDemo;public class Fruit {    private String name;    private  int imageId;    public Fruit(String name, int imageId) {        this.name = name;        this.imageId = imageId;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getImageId() {        return imageId;    }    public void setImageId(int imageId) {        this.imageId = imageId;    }}

修改activity_mian.xml布局文件

<?xml version="1.0" encoding="utf-8"?>    

layout中新建fruit_item.xml

<?xml version="1.0" encoding="utf-8"?>        

接下来需要为RecyclerView准备一个适配器,新建FruitAdapter类,继承自RecyclerView.Adapter,并将泛型指定为FruitAdapter.ViewHolder。其中,viewholder为fruitadapter中定义的一个内部类。

package com.syc.androidlearning.recyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import androidx.annotation.NonNull;import androidx.recyclerview.widget.RecyclerView;import com.syc.androidlearning.R;import com.syc.androidlearning.listViewDemo.Fruit;import java.util.List;public class FruitAdapter extends RecyclerView.Adapter {    private List mFruitList;    static class ViewHolder extends RecyclerView.ViewHolder{        ImageView fruitImage;        TextView fruitName;        public ViewHolder(@NonNull View itemView) {            super(itemView);            fruitImage = itemView.findViewById(R.id.fruit_image);            fruitName = itemView.findViewById(R.id.fruit_name);        }    }    public FruitAdapter(List mFruitList) {        this.mFruitList = mFruitList;    }    @NonNull    @Override    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);        ViewHolder holder = new ViewHolder(view);        return holder;    }    @Override    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {        Fruit fruit = mFruitList.get(position);        holder.fruitName.setText(fruit.getName());        holder.fruitImage.setImageResource(fruit.getImageId());    }    @Override    public int getItemCount() {        return mFruitList.size();    }}

最后,修改MainActivity中的代码

package com.syc.androidlearning;import androidx.appcompat.app.ActionBar;import androidx.appcompat.app.AppCompatActivity;import androidx.recyclerview.widget.LinearLayoutManager;import androidx.recyclerview.widget.RecyclerView;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.ListView;import android.widget.Toast;import com.syc.androidlearning.listViewDemo.Fruit;import com.syc.androidlearning.recyclerView.FruitAdapter;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    private List fruitList = new ArrayList<>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initFruits();        RecyclerView recyclerView = findViewById(R.id.recycler_view);        LinearLayoutManager layoutManager = new LinearLayoutManager(this);        recyclerView.setLayoutManager(layoutManager);        FruitAdapter fruitAdapter = new FruitAdapter(fruitList);        recyclerView.setAdapter(fruitAdapter);    }    private void initFruits() {        for (int i = 1; i < 10; ++i) {            Fruit apple = new Fruit("apple", R.drawable.ic_launcher_background);            fruitList.add(apple);        }    }}

 

更多相关文章

  1. Android重学之查漏补缺——Context引起的内存泄露
  2. 本来想用“{{”秀一波,结果却导致了内存溢出!
  3. android 背景图片滚动
  4. android 消息垂直滚动轮播控件
  5. Android(安卓)- 常见内存泄露
  6. Android(安卓)UI 滚动、手势、速度的三个帮助类学习
  7. Android内存泄漏优化总结
  8. Android简易实战教程--第四十六话《RecyclerView竖向和横向滚动
  9. Android的致命问题——性能优化

随机推荐

  1. k8s亲和性应用示例
  2. 禁止网页 切屏 切换标签
  3. 运维7年,对Linux的经验总结
  4. Windows 7部署Jenkins遇到的坑
  5. DolphinDB内存管理详解
  6. 一文讲解回流和重绘
  7. 送1万美元鼓励员工离职创业,亚马逊是疯了
  8. 零代码实现一对一表关系和无限主子表级联
  9. 20210401 微服务测试
  10. GAN毕业手册:从零到一构建自己的GAN模型