日常唠嗑

唔,今天早上想了很多,主要是想自己能不能通过面试得到工作。于是乎就跑到力扣看了看,好吧,我好像对算法啥的还是小白啊,瞬间就有点慌,担心会被问到(同学告诉我这是一定会问到的),小小的沮丧了一下,不过还是想着,无论如何,遇到困难遇到不会的,那就学吧,抓紧时间学习才是正道啊,一味地抱怨沮丧只会让自己走歪。
好吧,唠嗑完了回归正题。其实RecyclerView我之前有简单的提一下,但是还是重新来好了!

RecyclerView

这是一个类似ListView一样的列表控件,但是功能却极其强大,可以说是增强版的ListView,相比ListView,它的性能更加出色,也支持横向滚动、瀑布滚动等,而且在子项点击事件上的处理更出色。

用法

我对照着《第一行代码》打了一个简单的项目
在这里再次赞叹《第一行代码》是真的启蒙神书啊。
这是一个远程库,所以我们需要添加依赖才能使用。
添加依赖的方法:
来自大佬的教导:基于sdk28使用Android Studio创建RecyclerView实例,使用androidx导入recyclerView
大佬的教导开篇就是了,就不多说了。
老思路,一个控件的使用包括布局和逻辑。

一、布局

步骤就是

  • 1、在主布局中引入控件
  • 2、编写好子项布局

第一步:主要是在主布局中引入RecyclerView控件。

注意:因为是远程导入的,所以需要把完整的包名写出来
activity_main.xml

<androidx.recyclerview.widget.RecyclerViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/recycler_view"></androidx.recyclerview.widget.RecyclerView>

第二步:然后在子布局中,写好自己的子项布局

fruit_item.xml

<?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"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/fruit_image"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/fruit_name"/></LinearLayout>

到这儿布局基本完成,剩下的就是编写逻辑代码了

二、代码

步骤就是

  • 1、编写实体类
  • 2、创建适配器
  • 3、在主活动中使用

第一步:编写实体类

这个主要是看你想做一个怎么样的项目来定,以书上为例子,做一个左边显示水果图片,右边显示水果名的简单项目,就需要水果名与图片id
Fruit.java

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 int getImageId() {return imageId;}
}

小tips:在编写实体类的时候,我们只需要把需要的属性写出来,最好把属性都设置为private。这是一个编程习惯,可以对数据进行有效保护。然后编写构造函数以及get set方法时,使用快捷键alt+ins 就可以快速生成了!

第二步:创建适配器

  • 1、创建一个新类:FruitAdapter继承RecyclerView.Adapter,并且将泛型指定为FruitAdapter.ViewHolder。
    一开始这么写会报错,因为ViewHolder是一个内部类,我们还没有定义。所以接下来我们就定义内部类。这个内部类的作用主要是通过传入的一个参数view,从而获取RecyclerView子项的最外层布局,然后通过findViewById()方法获取控件的实例(在本例子中获取的是ImageView和TextView)。
  • 2、定义全局变量mFruitList,生成构造函数。
    这个构造函数是用来把要展示的数据源(水果图片、水果名字)传进来,并赋值给mFruitList。
  • 3、重写onCreateViewHolder()方法
    这个函数主要是用来加载子项布局(fruit_item),然后创建ViewHolder实例并把子项布局传入到构造函数中,最后返回ViewHolder实例。
  • 4、重写onBindViewHolder()方法
    这个方法是用来对传入的子项布局进行赋值的,也就是说当子项布局被传入进来,是它让布局有了水果名、水果图片。它会在每个布局被滚动到屏幕的时候执行。在本例子中,是通过position参数得到当前项的Fruit实例,然后再把数据设置到ViewHolder的ImageView和TextView里。
  • 5、重写getItemCount()方法
    这个方法主要是用来返回数据源的长度,也就是告诉RecyclerView他有多少个子项
    奇怪的是我在我的AS里按Ctrl+O重写方法里没找到这个方法,还是自己手打才有的,百度也没找到问题所在= =。
    FruitAdapter.java
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {private List<Fruit> mFruitList;static class ViewHolder extends RecyclerView.ViewHolder{ImageView fruitImage;TextView fruitName;public ViewHolder(@NonNull View view) {super(view);fruitImage = (ImageView)view.findViewById(R.id.fruit_image);fruitName = (TextView)view.findViewById(R.id.fruit_name);}}public FruitAdapter(List<Fruit> mFruitList) {this.mFruitList = mFruitList;}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);ViewHolder viewHolder = new ViewHolder(view);return viewHolder;}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {Fruit fruit = mFruitList.get(position);holder.fruitImage.setImageResource(fruit.getImageId());holder.fruitName.setText(fruit.getName());}@Overridepublic int getItemCount(){return mFruitList.size();}
}

第三步:在主活动中使用

  • 1、获取RecyclerView的实例
  • 2、创建LinearLayoutManager对象
  • 3、创建FruitAdapter实例
  • 4、将水果数据传入FruitAdapter的构造函数中
  • 5、调用setAdapter()方法完成适配器设置
    我没有设置数据库,所以就和书上一样自己随便弄了点数据上去。
    MainActivity.java
public class MainActivity extends AppCompatActivity {private List<Fruit> fruitList = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initFruit();RecyclerView 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 initFruit() {for(int i =5;i>0;i--){Fruit orange = new Fruit("orange",R.drawable.juzi);fruitList.add(orange);Fruit waterMelon = new Fruit("waterMelon",R.drawable.xigua);fruitList.add(waterMelon);Fruit apple = new Fruit("apple",R.drawable.pingguo);fruitList.add(apple);}}
}

效果:

平平无奇,但是相对于ListView而言,他少了很多优化的步骤,但是效率却也不错。

三、横向滚动与瀑布滚动

简单地看了一下,横向滚动就是把布局改一下,然后再MainActivity.java里加入了一行代码。瀑布滚动稍微多了一点步骤,但是我感觉我的时间不太够,就暂时作为了解,日后需要时再仔细学习吧。

四、点击事件

前面也有提到,RecyclerView的点击事件比ListView的点击事件更精确。拿这个例子来说。假如我是用的是ListView,那么我点击子项的时候,无论我点击图片还是文字,他都只知道,我点击了子项。但是如果使用的是RecyclerView,他就可以准确地判断出我点击了文字还是图片!
修改代码其实也很简单,只用修改适配器里的代码。主要是给最外层布局和图片加了点击事件,所以点击图片的时候会有Toast,点击文字的时候因为没有给文字注册点击事件,所以会被最外层布局捕捉到,相当于点击了最外层布局。
FruitAdapter.java

public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {private List<Fruit> mFruitList;static class ViewHolder extends RecyclerView.ViewHolder{View fruitView;ImageView fruitImage;TextView fruitName;public ViewHolder(@NonNull View view) {super(view);fruitView = view;fruitImage = (ImageView)view.findViewById(R.id.fruit_image);fruitName = (TextView)view.findViewById(R.id.fruit_name);}}public FruitAdapter(List<Fruit> mFruitList) {this.mFruitList = mFruitList;}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);final ViewHolder viewHolder = new ViewHolder(view);viewHolder.fruitView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {int position = viewHolder.getAdapterPosition();Fruit fruit = mFruitList.get(position);Toast.makeText(v.getContext(), "你点击了这个布局", Toast.LENGTH_SHORT).show();}});viewHolder.fruitImage.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {int position = viewHolder.getAdapterPosition();Fruit fruit = mFruitList.get(position);Toast.makeText(v.getContext(), "你点击了图片", Toast.LENGTH_SHORT).show();}});return viewHolder;}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {Fruit fruit = mFruitList.get(position);holder.fruitImage.setImageResource(fruit.getImageId());holder.fruitName.setText(fruit.getName());}@Overridepublic int getItemCount(){return mFruitList.size();}
}

看看效果:
点击文字:

点击图片:

至此,简单的RecyclerView的用法就写完了。

碎碎念

感觉时间真的不够啦,一天学一样似乎不太够时间了呢,毕竟还有算法没有弄啊,而且感觉算法也不是一朝一夕的事,但是不管怎么样,不要泄气,好好加油学习吧。
最近有时候总会觉得学习不想学习,玩也不想玩,就一直在发呆,很浪费时间,昨天就想通了,玩的时候就用心玩,学的时候也认真学,有时候不逼一下自己,你都不知道自己的潜力,接下来还有时间,不要想有的别的,前进!

安卓学习之路-RecyclerView的简单用法相关推荐

  1. .Net程序员安卓学习之路5:使用xutils注入View和事件以及图片的显示

    原文:.Net程序员安卓学习之路5:使用xutils注入View和事件以及图片的显示 xUtils注入和图片显示 一.xUtils注入 引用官方介绍: ViewUtils模块:•android中的io ...

  2. 数据库学习笔记---connect by的简单用法

    connect by的简单用法 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:_______以前的网站现在不弄了,抱歉  ---------------- ...

  3. 安卓学习之路之如何显示一个listview列表视图

    1.新建个安卓项目,点击res下的values目录,在该目录下创建一个名字为arrays.xml的Android xml文件,然后开始在里面写代码,代码如下: <?xml version=&qu ...

  4. Android:安卓学习笔记之navigation的简单理解和使用

    Android navigation的简单理解和使用 1 .基本概念 1.1.背景 1.2.含义 2.组成 2.1.Navigation graph 2.2.NavHostFragment 2.3.N ...

  5. Android开发学习之路--UI之简单聊天界面

    学了很多的ui的知识,这里就来实现个聊天的界面,首先来实现个layout的xml,代码如下: <?xml version="1.0" encoding="utf-8 ...

  6. 【安卓学习之路1】轻轻一点,好神奇——给activity_main.xml添加Button控件

    经过了前一段时间,断断续续的学习了一些JAVA基础,好歹也理解到了,继承 .多态.接口.字符串.常用集合.异常.终于还是按耐不住寂寞 ,偷偷地为Eclipse安装了ADT,所学 就学的开始了安卓之旅, ...

  7. 安卓学习第14课——GridView(简单图片浏览器1)

    今天学习的是GridView组件,利用的部分只是还是Adapter.imageView的知识,制作了简单图片浏览器 <LinearLayout xmlns:android="http: ...

  8. scala学习之路:1简单的打印输出,以及for循环的使用

    Scala语言学习 世界语言一大抄,自然语言也是一大抄,这年头不多学几门语言怎么混.这里用到底Scala编译器是从网上下载的(http://scala-ide.org) Scala IDE build ...

  9. 安卓学习之路---计步器算法

    关于网上找的一个算法的自己的一点理解 package cn.edu.hit.run.service;import android.content.Context; import android.har ...

  10. Android:安卓学习笔记之Bitmap的简单理解和使用

    Android Bitmap的简单理解和使用 Android Bitmap 一.Bitmap的定义 二.Bitmap的格式 2.1 存储格式 2.2 压缩格式 三.Bitmap创建方法 3.1 Bit ...

最新文章

  1. 顶会抄顶会?SIGIR论文作者回应质疑,ACM主席已介入
  2. 看到这儿,你就不会再轻易相信自己的眼睛
  3. 新装ubuntu10.04后的一些设置
  4. echarts生成图表
  5. python执行批处理文件_如何从Python中执行批处理文件,从而改变调用进程的环境?...
  6. linux配置本地yum(CentOS7)
  7. respondsToSelector的相关使用
  8. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_3_转换流的原理...
  9. utf8汉字编码对照表
  10. 什么叫软件前端测试,前端页面测试需要测试哪些内容?前端自动化测试的实现小技巧...
  11. SSIM(结构相似性)-数学公式及python实现
  12. 学计算机专业开学要买笔记本电脑吗,大一开学需要买电脑吗 大学开学电脑买什么好...
  13. 苹果服务器 显示器,苹果M1芯片的Mac可以外接什么显示器 显示器最高支持多少分辨率...
  14. 基于ThinkPHP6搭建的后台管理系统
  15. 开源OceanBase如何与Prometheus与Grafana监控结合
  16. 计算机信息管理面试自我介绍,信息管理专业的面试自我介绍
  17. Linux(centos7)基础操作
  18. 【arduino从入门到放肆】⑥Arduino 小台灯
  19. 从几个方面制作网站seo优化整体方案
  20. OSChina 周四乱弹 —— 曾经有只老鹰冲着我提需求

热门文章

  1. linux apt 安装命令
  2. PhotoshopCS4的抽出滤镜下载及安装方法
  3. pscc2019滤镜抽出_Adobe Photoshop CC 2019滤镜工具提升图片清晰度(PS)教程
  4. itools苹果录屏大师_录屏可以有声音,发照片可以免流量,计算器输错可回删
  5. Keil_V5 使用小技巧
  6. yuv422,yuv420,yuv444的区别
  7. 三、YUV422SP图像旋转
  8. 2pin接口耳机_让耳机“轻松一下”—— QDC BTX(耳机蓝牙线)
  9. brctl 网桥配置
  10. excel转txt后导入mysql 20211207