Android学习笔记之RecyclerView
16lz
2021-01-26
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); } }}
更多相关文章
- Android重学之查漏补缺——Context引起的内存泄露
- 本来想用“{{”秀一波,结果却导致了内存溢出!
- android 背景图片滚动
- android 消息垂直滚动轮播控件
- Android(安卓)- 常见内存泄露
- Android(安卓)UI 滚动、手势、速度的三个帮助类学习
- Android内存泄漏优化总结
- Android简易实战教程--第四十六话《RecyclerView竖向和横向滚动
- Android的致命问题——性能优化