想必大家对列表的表现形式已经不再陌生。服务器托管网手机上有联系人列表,文件列表,列表等等。 本文讲述的是在 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
。
这里使用内部类,把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
设计 Adapter
设计一个适配器继承自RecyclerView.Adapter
。
这里的VH
是我们上面写好的 ViewHolder。
LetterAdapter
中持有它自己的数据列表。需要实现3个方法。
-
onCreateViewHolder
方法,要求返回VH对象。
- 这里就是创建VH对象并返回。而VH构造器要求传入一个View,我们利用`LayoutInflater`创建一个view给它。当然,创建的根据就是前面设计好的`item_letter`。
LetterAdapter:
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
,指定为垂直方向,这样我们会得到一个上下滑动的列表。
使用 LinearLayoutManager
List characterList = new ArrayList();
for (char c = 'a'; c
观察运行结果
运行到手机或者模拟器上,打开这个activity。有的朋友就发现,为啥屏幕里一个子项item就占满了整个屏幕?
因为我们前面设置的item占满屏幕。回到item_letter.xml
,看一下根layout的设置。 把layout_height="match_parent"
里的设置改为wrap_content
。 重新编译运行一下再看看结果。
我们也可以给根 layout 设置固定的高度。具体视美术设计和需求而定。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单服务器托管网元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Dj…