android+教程+最新,Android教程2020 - RecyclerView使用入门

本文介绍RecyclerView的使用入门。这里给出一种比较常见的使用方式。

想必读者朋友对列表的表现形式已经不再陌生。手机上有联系人列表,文件列表,短信列表等等。

本文讲述的是在Android开发中用RecyclerView来实现列表效果。

使用步骤

引入RecyclerView

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

dependencies {

// ...

implementation 'androidx.recyclerview:recyclerview:1.1.0'

}

数据准备

先确定一下要显示什么样的数据。是用户信息,联系人,或是文件。这里以字符为例。

写代码前,我们先考虑一下需求,就是要如何显示,怎么显示数据。日常工作中,一般会有UI效果图。本文中的美术设计就由我们自己发挥了。

比如显示 a 97。

ViewHolder与layout

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

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

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

android:id="@+id/tv1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textColor="#000000" />

android:id="@+id/tv2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textColor="#000000" />

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

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。

android:id="@+id/re_view"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

设计Adapter

设计一个适配器继承自RecyclerView.Adapter。这里的VH是我们上面写好的ViewHolder。

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

onCreateViewHolder方法,要求返回VH对象。这里就是创建VH对象并返回。

而VH构造器要求传入一个View,我们利用LayoutInflater创建一个view给它。当然,创建的根据就是前面设计好的item_letter。

onBindViewHolder是把数据交给对应的VH来显示。

getItemCount方法要求返回数据的数量。

private class LetterAdapter extends RecyclerView.Adapter {

private List dataList;

public LetterAdapter(List 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,指定为垂直方向,这样我们会得到一个上下滑动的列表。

List 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));

观察运行结果

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

因为我们前面设置的item占满屏幕。回到item_letter.xml,看一下根layout的设置。

把layout_height="match_parent"里的设置改为wrap_content。

重新编译运行一下再看看结果。

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

小结

到这里我们掌握了RecyclerView的基本使用方式。

接下来还要了解如何自定义它的表现形式。例如点击或长按item的反应;item之间添加分割线;增/删/改数据;使用瀑布流样式等等。

RecyclerView使用了适配器模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值