【Android从零单排系列四十六】《Android中自定义ListView的实现方法》

news/2024/11/23 3:12:03/

目录

前言

一  ListView 介绍

二  ListView的缺点

三  如何自定义ListView


前言

小伙伴们,在前面的文章中,我们谈到了Android开发中的自定义view的基本概念及方法等,本文我们实际举例自定义一个ListView。

一  ListView 介绍

ListView 是 Android 中的经典列表控件,用于展示一组垂直滚动的项目。它具有以下特点和用途:

  1. 显示数据列表:ListView 可以用于显示各种类型的数据列表,例如联系人列表、新闻列表、商品列表等。

  2. 简单易用:使用 ListView 相对简单,只需设置适配器(Adapter)来提供数据,并选择合适的布局样式即可。

  3. 基本功能支持:ListView 提供了基本的滚动和点击事件处理,可以通过设置点击监听器来响应用户的点击操作。

  4. 支持多种布局样式:可以通过自定义适配器来定制每个列表项的布局,包括单行文本、图文混排等。

  5. 数据变更通知:当数据集发生变化时,可以通过适配器的通知方法告知 ListView 更新界面,保持数据与界面的同步。

二  ListView的缺点

ListView 在 Android 中是一个经典的列表控件,但也存在一些限制和缺点,包括:

  1. 性能问题:ListView 对于大量数据的展示可能存在性能问题,特别是当列表项变得复杂或包含大量视图元素时。这可能导致滚动卡顿或列表加载速度慢。

  2. 有限的布局灵活性:默认情况下,ListView 的每个列表项使用相同的布局结构。虽然可以通过自定义适配器来定制每个列表项的外观,但对于不同类型的列表项布局,ListView 并不提供直接的支持。为了实现更复杂的布局需求,可能需要使用其他控件或库。

  3. 缺乏内置的交互效果:ListView 没有内置的交互效果,如滑动删除、侧滑菜单等。如果需要添加这些常见的交互效果,需要编写自定义的触摸事件处理逻辑或使用第三方库。

  4. 缺少分页支持:ListView 不支持自动分页加载数据,要实现分页效果,需要手动监听滚动事件并加载下一页数据。

  5. 固定高度限制:ListView 默认情况下要求每个列表项具有相同的高度,这限制了列表项的灵活性。如果列表项高度不同,需要重写适配器来处理不同高度的情况。

总的来说,尽管 ListView 是一个广泛使用的列表控件,但在复杂的布局和交互需求方面存在一些限制。如果需要更强大和灵活的列表控件,可以考虑使用 RecyclerView,它是 Android 官方推荐的替代方案,并提供了更好的性能、布局灵活性和交互支持。

三  如何自定义ListView

首先,创建一个名为 CustomAdapter 的类,继承自 BaseAdapter:

public class CustomAdapter extends BaseAdapter {private Context context;private List<String> dataList;public CustomAdapter(Context context, List<String> dataList) {this.context = context;this.dataList = dataList;}@Overridepublic int getCount() {return dataList.size();}@Overridepublic Object getItem(int position) {return dataList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder;if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);viewHolder = new ViewHolder();viewHolder.textView = convertView.findViewById(R.id.text_view);convertView.setTag(viewHolder);} else {viewHolder = (ViewHolder) convertView.getTag();}String itemText = dataList.get(position);viewHolder.textView.setText(itemText);return convertView;}static class ViewHolder {TextView textView;}
}

在上述代码中,我们使用了自定义的适配器 CustomAdapter,并重写了 getCount()getItem()getItemId()getView() 方法。

接下来,创建一个名为 list_item.xml 的布局文件,用于定义每个列表项的外观。例如,我们可以在布局中放置一个 TextView 来显示文本:

<!-- list_item.xml -->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/text_view"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="16dp" />

最后,在使用 ListView 的 Activity 中,将 CustomAdapter 设置为 ListView 的适配器:

public class MainActivity extends AppCompatActivity {private ListView listView;private CustomAdapter customAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listView = findViewById(R.id.list_view);// 准备数据源,这里以一个字符串列表为例List<String> dataList = new ArrayList<>();dataList.add("Item 1");dataList.add("Item 2");dataList.add("Item 3");// 创建自定义适配器并设置给 ListViewcustomAdapter = new CustomAdapter(this, dataList);listView.setAdapter(customAdapter);}
}

此时,您就创建了一个自定义的 ListView,并使用 CustomAdapter 填充数据。运行应用程序后,您将看到一个显示列表项的自定义列表视图。

通过在 CustomAdapter 类中添加更多的逻辑和布局定义,您可以根据需求定制每个列表项的外观和功能。


http://www.ppmy.cn/news/730972.html

相关文章

hadoop生态圈-- 个人笔记学习01

分布式大数据处理框架 可靠高效可伸缩 包含HDFS MapReduce等框架 分层 数据来源数据传输数据存储 – HDFS数据管理数据计算任务调度业务模型 HDFS 分布式文件系统 高容错性低廉硬件适配高吞吐量超大数据集 client: 提交读取请求 HDFS的api编写程序交互Hadoop的Datenode…

xm-select的简单使用

基于客户需求 需要一个select 多选 下拉框。 前台框架使用layUI 于是进行查找—》formSelects 4.x 这是layUI的一个第三方插件 但是看了一下发现已经停止维护了&#xff01;&#xff01;&#xff01; 后来使用 xm-select 官网&#xff1a;https://maplemei.gitee.io/xm-select…

-xms -xmx无效

java内存和linux中内存的关系 -xms -xmx无效 -xms -xmx无效 在查询生产问题时发现-xmx无效&#xff0c;jvm这个进程所产生的内存竟然远-远超出了-xmx&#xff0c;怎么回事&#xff1f; 以下是个人的推断&#xff0c;没有去认真学习操作系统的进程管理。在操作系统中能控制的一…

xm-select使用

最近项目上需要加载一个问题分类下拉框,数据量不是普通的六七个,还需要有搜索功能,原生的下拉框是满足不了了, 于是使用layui的第三方组件xmSelect,功能是是非常强大的,分页,搜索,分组等等 如果需要展示更多列的数据,可以使用tableSelect layui.config({base: ./layui_exts/xmS…

xm-select动态数据分组多选

xm-select-v1.2.1 主页资源可免费下载~ 先看结果 js code <script src"../static/xmSelect/xm-select.js"></script><div id"demo" class"xm-select-demo" style"width: 300px; margin: 20px;"></div><sc…

2022-07-28 xm-select 的使用

简介(文档) 始于layui的一个多选解决方案。 前身formSelects , 由于渲染速度慢, 代码冗余, 被放弃了 xm-select使用了新的开发方式, 利用preact进行渲染, 大幅度提高渲染速度, 并且可以灵活拓展 第一步: 下载 第二步: 引入 xm-select.js 第三步: 写一个<div id"demo1…

XM验证

http://www.w3school.com.cn/xml/xml_dtd.asp 拥有正确语法的 XML 被称为“形式良好”的 XML。 通过 DTD 验证的 XML 是“合法”的 XML。 ------------------------------------------------------------------------------- 形式良好的 XML 文档 “形式良好”或“结构良好”的…

Xms Xmx含义

Xms 我猜测是EXtended Memory Size可扩展的内存大小&#xff0c;Xmx是EXtended Memory Max Size 可扩展的最大内存(就算不是,这样理解记忆也挺好的) Xms 通常为操作系统可用内存的1/64大小 Xmx 是对堆区的内存配置&#xff0c;Xms是初始化的内存大小&#xff0c;Xmx是堆的最…