关于android:Android入门教程-RecyclerView使用入门

3次阅读

共计 3115 个字符,预计需要花费 8 分钟才能阅读完成。

想必大家对列表的表现形式曾经不再生疏。手机上有联系人列表,文件列表,短信列表等等。本文讲述的是在 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
  • onBindViewHolder是把数据交给对应的 VH 来显示。
  • getItemCount办法要求返回数据的数量。

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 设置固定的高度。具体视美术设计和需要而定。

Android 零根底入门教程视频参考

正文完
 0