首页 > 其他分享 >Android入门教程 | RecyclerView使用入门

Android入门教程 | RecyclerView使用入门

时间:2023-11-09 22:31:39浏览次数:47  
标签:ViewHolder layout VH 入门教程 dataList item Android RecyclerView

Android入门教程 | RecyclerView使用入门 _android

想必大家对列表的表现形式已经不再陌生。手机上有联系人列表,文件列表,列表等等。 本文讲述的是在 Android 开发中用 RecyclerView 来实现列表效果。

使用步骤

引入RecyclerView

在 app 的 build.gradle 文件中添加引用。我们使用的是 androidx 包。

gradle:

dependencies {
    // ...
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
}
数据准备

先确定一下要显示什么样的数据。是用户信息,联系人,或是文件。这里以字符为例。 写代码前,我们先考虑一下需求,就是要如何显示,怎么显示数据。日常工作中,一般会有 UI 效果图。而本文中的美术设计就由我们自己发挥了。

比如显示 a 和 97

ViewHolder 与 layout

现在要显示的数据已经确定了。来设计UI表现。layout与 ViewHolder 紧密相关。在设计 Adapter 类前,先写 ViewHolder 类会比较好。

新建定义 item(列表子项)的布局文件item_letter.xml

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

    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000" />

    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000" />

</LinearLayout>

这里使用内部类,把 ViewHolder 类写在 Activity 类里面。

创建VH类

private class VH extends RecyclerView.ViewHolder {
    TextView tv1;
    TextView tv2;

    public VH(@NonNull View itemView) {
        super(itemView);
        tv1 = itemView.findViewById(R.id.tv1);
        tv2 = itemView.findViewById(R.id.tv2);
    }
}

从上面可以看出,ViewHolder 和 item 的 layout 是紧密相关的。 layout 里面的 id 写的比较简单。实际项目中可以给一些更有意义的 id 命名。

在 activity 的 layout 文件中,添加RecyclerView

layout 中添加 RecyclerView

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/re_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
设计 Adapter

设计一个适配器继承自 RecyclerView.Adapter<VH>

这里的VH是我们上面写好的 ViewHolder。

LetterAdapter中持有它自己的数据列表。需要实现3个方法。

  • onCreateViewHolder方法,要求返回VH对象。
- 这里就是创建VH对象并返回。而VH构造器要求传入一个View,我们利用`LayoutInflater`创建一个view给它。当然,创建的根据就是前面设计好的`item_letter`。

LetterAdapter:

private class LetterAdapter extends RecyclerView.Adapter<VH> {

    private List<Character> dataList;

    public LetterAdapter(List<Character> dataList) {
        this.dataList = dataList;
    }

    @NonNull
    @Override
    public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new VH(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_letter, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull VH holder, int position) {
        Character c = dataList.get(position);
        holder.tv1.setText(c.toString());
        holder.tv2.setText(String.valueOf(Integer.valueOf(c)));
    }

    @Override
    public int getItemCount() {
        return dataList.size();
    }
}

粗心大意的时候,可能会忘记初始化 adapter 里的 dataList。会报一个null pointer异常。

设置 RecyclerView

在 Activity 的 onCreate 方法里进行了初始化。

RecyclerView需要2项设置,适配器与LayoutManager。适配器就是我们上面定的那个。 LayoutManager这里用LinearLayoutManager,指定为垂直方向,这样我们会得到一个上下滑动的列表。

使用 LinearLayoutManager

List<Character> characterList = new ArrayList<>();
for (char c = 'a'; c <= 'z'; c++) {
    characterList.add(c);
}

mLetterAdapter = new LetterAdapter(characterList);
RecyclerView letterReView = findViewById(R.id.re_view);
letterReView.setAdapter(mLetterAdapter);
letterReView.setLayoutManager(new LinearLayoutManager(this, RecyclerView.VERTICAL, false));` </pre></details>
观察运行结果

运行到手机或者模拟器上,打开这个activity。有的朋友就发现,为啥屏幕里一个子项item就占满了整个屏幕?

因为我们前面设置的item占满屏幕。回到item_letter.xml,看一下根layout的设置。 把layout_height="match_parent"里的设置改为wrap_content。 重新编译运行一下再看看结果。

我们也可以给根 layout 设置固定的高度。具体视美术设计和需求而定。

标签:ViewHolder,layout,VH,入门教程,dataList,item,Android,RecyclerView
From: https://blog.51cto.com/u_16163452/8286082

相关文章

  • Android 系统自动安装app
      #!/system/bin/shinit_dev(){#initworkchmod666/dev/dgard0chmod666/dev/ttyS0chmod666/dev/ttyS5chmod666/dev/ttyS7chmod666/dev/tamper0chmod666/dev/magnetometer0chmod666/dev/doorbutton0chmod......
  • 谷歌正为 Android 平台 Chrome 浏览器设计“Polish”主页
    敢兴趣的小伙伴们,可以在浏览器中访问以下网址启用:chrome://flags/#enable-surface-polish据悉,相关主页也存在于Chrome的稳定版本中,但只有带有低对比度的方形搜索栏的早期版本,而最完整的版本可以在ChromeDev和Canary中找到。​​‍​​......
  • 谷歌正为 Android 平台 Chrome 浏览器设计“Polish”主页
    敢兴趣的小伙伴们,可以在浏览器中访问以下网址启用:chrome://flags/#enable-surface-polish据悉,相关主页也存在于Chrome的稳定版本中,但只有带有低对比度的方形搜索栏的早期版本,而最完整的版本可以在ChromeDev和Canary中找到。​​‍​​......
  • 直播app源码开源,Android 滚动的公告栏
    直播app源码开源,Android滚动的公告栏 publicclassMarqueeTextViewextendsLinearLayout{   privateContextmContext;  privateViewFlipperviewFlipper;  privateViewmarqueeTextView;  privateString[]textArrays;  privateMarqueeTextView......
  • 从零开始的Android音视频学习(二)
    AudioRecord录制PCM音频看一下AudioRecord安卓源码的构造函数(targetAPi29)主要看一下几个参数audioSource声音来源,参考MediaRecorder.AudioSource这里的种类还比较多,暂时先使用MIC,其他的后续用到再说吧sampleRateInHz音频采样率注释上说44100Hz是全部设备都支持的,其他的......
  • Android之签名
    一,AndroidStudio二,通过AndroidStudio进行签名1,Build->  GenerateSignedBundle/APK...         2,我们选择APK3,如果没有签名必须新建签名。3.1,点击“Createnew...”新建签名   3.2, 开始新建签名文件3.2.1,如下图所示:      3.2.2,......
  • Delphi10.4 Android调用相机返回图片调试
    Delphi10.4Android调用相机返回图片调试使用Delphi封装的“StandardAction”这些标准操作,可以非常方便我们调用Android系统功能。在Android上会存在各类权限问题造成应用无法运行创建工程 File->New->Multi-DeviceApplication-Delphi选择" BlankApplication",点击"OK"完成......
  • Android 实现加减自定义控件
    ✍️作者简介:沫小北/码农小北(专注于Android、Web、TCP/IP等技术方向)</br>......
  • 2023-11-08 Android studio下载的模拟器存放路径以及如何修改存放路径 ==》默认路径:C:
    模拟器存放默认路径:C:\Users\Administrator\.android\avd如何修改:设置一个系统变量,如图,点击Help==》EditCustomProperties 然后再弹出的文本框里输入你要存放的路径,比如我存在D盘的adv文件夹里面ANDROID_AVD_HOME=D:\\adv 我的as版本:2022.3.1Patch3 写到最后:c盘......
  • Android.mk 笔记
    相关函数makefile文件里的函数跟变量的使用方法很相似,都是用一个$符号跟左括号,函数名,空格后跟一列由逗号分隔的参数,最后用右括号回括(1)strip函数名称:去空格函数-strip功能:去掉<string>字串中开头和结尾的空字符串,并将中间的多个连续空字符(如果有的化)合并未一个空字符。返回......