java arrayadapter_简单好用的Adapter---ArrayAdapter详解

article/2025/9/22 23:01:04

拖延症最可怕的地方就是:就算自己这边没有拖延,但对方也会拖延,进而导致自己这边也开始拖延起来!现在这个项目我这边已经是完工了,但是对方迟迟没有搞定,导致整个项目无法提交。

这就是拖延症的可怕:我们不仅是与自己的拖延症作战,而是与所有有关人士的拖延症作战,决定项目是否能够提交,在于那个最慢的人。

既然决定权已经不在我的手上,那么我也可以做做其他事情,像是现在这样写写博客。

这次就介绍一下ListView中比较简单但又非常方便的ArrayAdapter。

ArrayAdapter是BaseAdapter的派生类,在BaseAdapter的基础上,添加了一项重大的功能:可以直接使用泛型构造。

我们先来看一个简单的例子:

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ListView listView = (ListView) this.findViewById(R.id.list);

UserAdapter adapter = new UserAdapter(this, R.layout.list_item);

adapter.add(new User(10, "小智", "男"));

adapter.add(new User(10, "小霞", "女"));

listView.setAdapter(adapter);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

class UserAdapter extends ArrayAdapter {

private int mResourceId;

public UserAdapter(Context context, int textViewResourceId) {

super(context, textViewResourceId);

this.mResourceId = textViewResourceId;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

User user = getItem(position);

LayoutInflater inflater = getLayoutInflater();

View view = inflater.inflate(mResourceId, null);

TextView nameText = (TextView) view.findViewById(R.id.name);

TextView ageText = (TextView) view.findViewById(R.id.age);

TextView sexText = (TextView) view.findViewById(R.id.sex);

nameText.setText(user.getName());

ageText.setText(user.getAge());

sexText.setText(user.getSex());

return view;

}

}

class User {

private int mAge;

private String mName;

private String mSex;

public User(int age, String name, String sex) {

this.mAge = age;

this.mName = name;

this.mSex = sex;

}

public String getName() {

return this.mName;

}

public String getAge() {

return this.mAge + "";

}

public String getSex() {

return this.mSex;

}

}

这里自定义了一个ArrayAdapter,有关于Adapter的使用在之前的SimpleAdapter中已经涉及到了,所以这里直接就是以自定义的ArrayAdapter作为例子。

我们这里需要将学生的信息罗列出来,需要三个TextView:

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

android:id="@+id/name"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

android:id="@+id/age"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

android:id="@+id/sex"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

3d6dba6402d07c83700cb6a94105168e.png

在自定义ArrayAdapter的时候,最神奇的地方就是我们可以指定ArrayAdapter绑定的数据类型,可以是基本数据类型,也可以是自定义的对象类型,像是这次的User类型。对于自定义的ArrayAdapter的构造方法,存在很多形式,这次是传进一个View的资源Id,但是我们也可以指定绑定的数据类型。

ArrayAdapter的神奇之处就是我们竟然可以像是操作Array一样来操作ArrayAdapter!像是例子中的添加操作,而其他的适配器都是需要传进一个容器的。ArrayAdapter为什么可以处理对象类型的数据呢?其实,ArrayAdapter是使用数组中对象的toString()方法来填充指定的TextView,所以我们可以通过重写对象的toString()方法来自定义ListView的显示。

@Override

public View getView(int position, View convertView, ViewGroup parent) {

User user = getItem(position);

LayoutInflater inflater = getLayoutInflater();

View view = inflater.inflate(mResourceId, null);

TextView text = (TextView) view.findViewById(R.id.info);

text.setText(user.toString());

return view;

}

class User {

private int mAge;

private String mName;

private String mSex;

public User(int age, String name, String sex) {

this.mAge = age;

this.mName = name;

this.mSex = sex;

}

@Override

public String toString() {

return "姓名:" + mName + " " + "年龄:" + mAge + " " + "性别:" + mSex;

}

}

这样我们可以只在一行中显示所有数据。

907282d8cff430b7169aca5bf846c5e8.png

使用ArrayAdapter最大的疑问就是我们是否需要将一个现成的容器传入ArrayAdapter中?原本ArrayAdapter本身就用一般容器的基本操作,像是添加新的元素等,但它本身并不能完成当成容器使用,我们更多的时候是要将一个容器中的元素交给ArrayAdapter,由后者决定它的显示形式。

class UserAdapter extends ArrayAdapter {

private int mResourceId;

public UserAdapter(Context context, int textViewResourceId,

List users) {

super(context, textViewResourceId, users);

this.mResourceId = textViewResourceId;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

User user = getItem(position);

LayoutInflater inflater = getLayoutInflater();

View view = inflater.inflate(mResourceId, null);

TextView text = (TextView) view.findViewById(R.id.info);

text.setText(user.toString());

return view;

}

}

List users = new ArrayList();

users.add(new User(10, "小智", "男"));

users.add(new User(10, "小霞", "女"));

UserAdapter adapter = new UserAdapter(this, R.layout.list_item, users);

listView.setAdapter(adapter);

如果我们将ArrayAdapter绑定的数据类型定义为Object,我们可以自由的传入任何类型的容器而不需要任何有关类型转换的操作!

ArrayAdapter不仅仅是可以显示TextView,它当让也像是其他Adapter一样,可以显示任何其他非TextView的组件:

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ListView listView = (ListView) this.findViewById(R.id.list);

List users = new ArrayList();

users.add(10);

users.add(11);

UserAdapter adapter = new UserAdapter(this, R.layout.list_item,

R.id.info, users);

listView.setAdapter(adapter);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

class UserAdapter extends ArrayAdapter {

private int mResourceId;

public UserAdapter(Context context, int resourceId,

int textViewResourceId, List users) {

super(context, resourceId, textViewResourceId, users);

this.mResourceId = resourceId;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

Object user = getItem(position);

LayoutInflater inflater = getLayoutInflater();

View view = inflater.inflate(mResourceId, null);

TextView text = (TextView) view.findViewById(R.id.info);

text.setText(user.toString());

return view;

}

}

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="点击" />

android:id="@+id/info"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

1acd9115f7a5213ef12295d2159a2959.png

如果我们的布局中需要其他组件,必须指定该布局中用于显示ArrayAdapter中数据的TextView的Id。

如果只是方便绑定数据的话,其实是没有必要专门独立个ArrayAdapter出来,只要覆写getView()就可以,正如使用容器就是为了方便大量数据的处理一样的道理,使用ArrayAdapter也是为了处理数据较大的情况,像是超过100条或者频繁动态增删数据时,就可以使用ArrayAdapter,而且,为了方便我们刷新UI,ArrayAdapter也提供了setNotifyOnChange()方法,这样可以降低UI的处理量,使得刷新UI更加快速,主要是通过停止对add,insert,remove和clear的操作来实现这点。

总结

以上就是本文关于简单好用的Adapter---ArrayAdapter详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:python好玩的项目—色情图片识别代码分享、Python实现一个简单的验证码程序、Python生成数字图片代码分享等,有什么问题可以随时留言,陪伴是最长情的告白,感谢大家一直以来对本站的支持!


http://chatgpt.dhexx.cn/article/XhRfI579.shtml

相关文章

ArrayAdapter SimpleAdapter

1.ArrayAdapter 数组适配器 用于简单的文字列表 2.SimpleAdapter 简单适配器 用户条目只有两个控件的列表 3.条目点击事件 ListView 一般用 setOnItemClickListener() 这个方法属于 AdapterView 1.先得到适配器 getAdapter() 2.在得到所在位置的条目的数…

ArrayAdapter使用示例

1)ArrayAdapter使用示例: 运行效果图: 代码实现: public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.…

Android Listview ArrayAdapter示例

ListView 的使用大致上可以分为四个步骤&#xff1a;添加 ListView 组件、存储数据、设置列表项item的布局文件、加载数据/资源进行显示、添加监听。 这篇文章主要讲一下最简单的ArrayAdapter的用法 示例效果如下&#xff1a; 主layout文件 <?xml version"1.0"…

java arrayadapter_「arrayadapter」Android之ArrayAdapter(数组适配器)的三种方法 - seo实验室...

arrayadapter arrayadapter数组适配器用于绑定格式单一的数据&#xff0c;数据源可以是集合或者数组 列表视图(listview)以垂直的形式列出需要显示的列表项。 实现过程&#xff1a;新建适配器->添加数据源到适配器->视图加载适配器 第一种&#xff1a;直接用ListView组件…

java arrayadapter_Android之ArrayAdapter详解

BaseAdapter之ArrayAdapter ArrayAdapter是BaseAdapter的一个具体实现&#xff0c;可直接使用泛型进行构造&#xff0c;能像List一样直接对Adapter进行增删操作。也是最简单的一个了 ArrayAdapter使用示例&#xff1a; 运行效果图&#xff1a; public class MainActivity exten…

ArrayAdapter

Android Adapter:ArrayAdapter篇 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 这是Android Adapter系列文章的第一篇&#xff0c;该系列主要会讲到如下几种Adapter。&#xfffc; ArrayAdapter是BaseAdapter的一个具体实现&#xff0c;可直接使…

ArrayAdapter三个参数和四个参数的使用区别

ArrayAdapter三个参数和四个参数的使用区别: //3参形式:public ArrayAdapter (Context context, int resource, T[] objects)//4参形式:public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)参数介绍 Context context //指上下文,一般写…

【Android基础】ArrayAdapter适配器展示数据

文章目录 前言创建ListView启动渲染数据 效果图 前言 适配器充当View与数据之间的桥梁&#xff0c;本文记录下ArrayAdapter适配器展示数据&#xff1b;ArrayAdapter比较简单&#xff0c;只能显示一行文本&#xff1b; 创建ListView <?xml version"1.0" encodi…

Android 数组适配器和简单适配器

数组适配器ArrayAdapter ArrayAdapter主要用于每行列表只展示文本的情况 声明一个数组适配器 ArrayAdapter<String> arrayAdapter new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, stringArray);//stringArray为字符串数组 pr…

winhex 19.8 注册码生成工具(keygen)

下面这个是我电脑生成的&#xff0c;可以先试试&#xff0c;如果不行可以下载工具重新生成。 // WinHex license fileName: DimitarSerg Addr: dsmail.ua Addr: Ukraine Data: 0F557DBDC9F648EACF4065D7F857223E Data: 4E0656414E48F4DEE6991EC8205CB994 Cksm: F22E328E下载地…

cdr2022辅助注册机序列号

CorelDRAW2022使用专业工具踏上设计之旅&#xff0c;绘制矢量图片、调整布局、编辑照片等&#xff0c;空间广阔&#xff0c;操作精微详尽。它供给了规划者一整套的绘图工具包括圆形、矩形、多边形、方格、螺旋线&#xff0c;等等&#xff0c;并合作塑形工具&#xff0c;对各种根…

软件注册码

edit plus 注册码自动生成网页&#xff1a; http://demon.tw/my-work/editplus-regcode-online.html baoyou F3507-CC2A0-2E1E5-4802E-54FB6 http://www.jb51.net/tools/editplus/ wm ware workstation 12 注册码 5A02H-AU243-TZJ49-GTC7K-3C61N &#xff08;亲测 可用&…

各种注册码

1、navicat for mysql 10.1.7注册码,找了很多都不能用&#xff0c;终于找到一个可用的了&#xff1a; 名和组织随意,注册码是:NAVN-LNXG-XHHX-5NOO 下载地址&#xff1a;http://www.cr173.com/soft/38153.html 注册码原文&#xff1a;http://blog.sina.com.cn/s/blog_763dc8…

各种杀毒软件序列号注册码大全

瑞星杀毒软件2006升级包以及的序列号||||金山毒霸2006正版序列号注册码和升级器 看到后觉得不错&#xff0c;特来推荐给各位 瑞星杀毒软件2006升级包以及的序列号 产品序列号&#xff1a;7JE9R9-QTSIEI-EFF4SB-EJ5200 产品序列号&#xff1a;52LDJG-Q9LBCT-6ACQX2-R38200 产品序…

NB-IOT+GPS模组

NB-IOTGPS模组AM21E助力物联网基于位置的服务 定位模块大家都知道&#xff0c;就是提供位置信息的模块产品&#xff0c;定位精度在3-5米&#xff0c;主要智能穿戴&#xff0c;物品管理&#xff0c;智慧物流领域中。 在选择以智能手环、智能手表为代表的智能穿戴设备时&#xf…

NB-IoT物联网技术

一、什么是NBIOT NB-IoT是指窄带物联网(Narrow Band -Internet of Things)技术。NB-IOT聚焦于低功耗广覆盖(LPWA)物联网(IoT)市场&#xff0c;是一种可在全球范围内广泛应用的新兴技术。NB-IOT使用License频段&#xff0c;可采取带内、保护带或独立载波等三种部署方式&#xf…

【Jetson目标检测SSD-MobileNet应用实例】(五)根据输出的检测结果,使用串口和STM32配合进行电机控制

【Jetson目标检测SSD-MobileNet应用实例】&#xff08;一&#xff09;win11中配置SSD-MobileNet网络训练境搭建 【Jetson目标检测SSD-MobileNet应用实例】&#xff08;二&#xff09;制作自己的数据集–数据集的采集、标注、预处理 【Jetson目标检测SSD-MobileNet应用实例】&am…

NB-IOT 温湿度数据上报及IOT平台数据下发(STM32L4,电信Oceanconnect, COAP协议)

在设备侧&#xff0c;智能设备采用了NB-IOT芯片&#xff0c;它和中国电信物联网开放平台之间通过CoAP协议通讯。CoAP报文的payload里是设备的应用数据。 应用server通过http/https协议和平台通讯&#xff0c;通过调用平台的开放API来控制设备&#xff0c;平台把设备上报的数据…

怎么使用nbtscan工具一条命令扫描局域网内所有的IP及MAC

具体操作方法&#xff1a; 1、下载nbtscan.rar文件并解压。 2、然后将解压好的cygwin1.dll和nbtscan.exe两文件拷贝到C:\WINDOWS\system32根目录下&#xff08;根目录下即可&#xff09;&#xff1b; 3、进入cmd窗口就可以输入命令&#xff1a;nbtscan 192.168.X.98/24&#xf…

NB-IOT的使用

目录 一、AT指令 二、串口透明传输 三、搭建自己的服务器 一、AT指令 •AT命令集是由拨号调制解调器(MODEM)的发明者贺氏公司(Hayes)为了控制Modem发明的控制协议。 • •AT是Attention的缩写,协议本身采用文本.每个命令均以AT打头,因此得名 • •主要的移动电话生产厂商诺基…