这篇文章主要介绍了Java 语言(一种计算机语言,尤用于创建网站)数组适配器用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
拖延症最可怕的地方就是:就算自己这边没有拖延,但对方也会拖延,进而导致自己这边也开始拖延起来!现在这个项目我这边已经是完工了,但是对方迟迟没有搞定,导致整个项目无法提交。
这就是拖延症的可怕:我们不仅是与自己的拖延症作战,而是与所有有关人士的拖延症作战,决定项目是否能够提交,在于那个最慢的人。
既然决定权已经不在我的手上,那么我也可以做做其他事情,像是现在这样写写博客。
这次就介绍一下列表视图中比较简单但又非常方便的数组适配器。
ArrayAdapter是基本适配器的派生类,在基本适配器的基础上,添加了一项重大的功能:可以直接使用泛型构造。
我们先来看一个简单的例子:
@覆盖
受保护的void onCreate(Bundle saved instancestate){
超级棒。oncreate(savedInstanceState);
setContentView(r . layout。活动_主);
ListView ListView=(ListView)this。findviewbyid(r . id。列表);
用户适配器adapter=新用户适配器(this,r . layout。list _ item);
adapter.add(新用户(10小智', '男'));
adapter.add(新用户(10小霞', '女'));
listView.setAdapter(适配器);
}
@覆盖
public boolean onCreateOptionsMenu(菜单菜单){
//膨胀菜单;如果操作栏存在,这会将项目添加到操作栏中。
getMenuInflater().inflate(R.menu.main,menu);
返回真实的
}
类用户适配器扩展ArrayAdapterUser {
private int mResourceId
公共用户适配器(上下文Context,int textViewResourceId) {
super(context,textViewResourceId);
这个。mresourceid=textViewResourceId;
}
@覆盖
公共视图getView(int position,View convertView,ViewGroup parent) {
user user=getItem(position);
LayoutInflater inflater=getLayoutInflater();
视图视图=充气机。inflate(mResourceId,null);
TextView name text=(TextView)view。findviewbyid(r . id。姓名);
TextView age text=(TextView)view。findviewbyid(r . id。年龄);
TextView sext=(TextView)视图。findviewbyid(r . id。性);
名称文本。settext(用户。getname());
年龄文本。settext(用户。getage());
sext。settext(用户。getsex());
返回视图;
}
}
类别用户{
私有图像
私有字符串mnname
私有字符串mSex
公共用户(年龄,字符串名称,字符串性别){
this.mAge=年龄;
this.mName=name
this.mSex=sex
}
公共字符串getName() {
返回this.mName
}
公共字符串getAge() {
返回这个。mage“”;
}
公共字符串getSex() {
返回this.mSex
}
}
这里自定义了一个ArrayAdapter,有关于适配器的使用在之前的简单适配器中已经涉及到了,所以这里直接就是以自定义的ArrayAdapter作为例子。
我们这里需要将学生的信息罗列出来,需要三个文本视图:
?可扩展标记语言版本='1.0 '编码='utf-8 '?
线性布局xmlns:Android=' http://模式。安卓。' com/apk/RES/Android '
Android:layout _ width=' match _ parent '
Android:layout _ height=' match _ parent '
安卓:方向='垂直'
文本视图
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 '/
/线性布局
在自定义ArrayAdapter的时候,最神奇的地方就是我们可以指定ArrayAdapter绑定的数据类型,可以是基本数据类型,也可以是自定义的对象类型,像是这次的用户类型。对于自定义的ArrayAdapter的构造方法,存在很多形式,这次是传进一个视角的资源Id,但是我们也可以指定绑定的数据类型。
ArrayAdapter的神奇之处就是我们竟然可以像是操作排列一样来操作ArrayAdapter!像是例子中的添加操作,而其他的适配器都是需要传进一个容器的ArrayAdapter为什么可以处理对象类型的数据呢?其实,数组适配器是使用数组中对象的toString()方法来填充指定的文本视图,所以我们可以通过重写对象的toString()方法来自定义列表视图的显示。
@覆盖
公共视图getView(int position,View convertView,ViewGroup parent) {
user user=getItem(position);
LayoutInflater inflater=getLayoutInflater();
视图视图=充气机。inflate(mResourceId,null);
TextView text=(TextView)视图。findviewbyid(r . id。info);
文字。settext(用户。tostring());
返回视图;
}
类别用户{
私有图像
私有字符串mnname
私有字符串mSex
公共用户(年龄,字符串名称,字符串性别){
this.mAge=年龄;
this.mName=name
this.mSex=sex
}
@覆盖
公共字符串toString() {
'返回'姓名:' mName ' ' '年龄:'法师' ' '性别:'毫秒
}
}
这样我们可以只在一行中显示所有数据。
使用ArrayAdapter最大的疑问就是我们是否需要将一个现成的容器传入ArrayAdapter中?原本ArrayAdapter本身就用一般容器的基本操作,像是添加新的元素等,但它本身并不能完成当成容器使用,我们更多的时候是要将一个容器中的元素交给ArrayAdapter,由后者决定它的显示形式。
类用户适配器扩展ArrayAdapterUser {
private int mResourceId
公共用户适配器(上下文上下文,int textViewResourceId,
列表用户用户){
super(context,textViewResourceId,users);
这个。mresourceid=textViewResourceId;
}
@覆盖
公共视图getView(int position,View convertView,ViewGroup parent) {
user user=getItem(position);
LayoutInflater inflater=getLayoutInflater();
视图视图=充气机。inflate(mResourceId,null);
TextView text=(TextView)视图。findviewbyid(r . id。info);
文字。settext(用户。tostring());
返回视图;
}
}
ListUser users=new ArrayListUser();
users.add(新用户(10,小智', '男'));
users.add(新用户(10,小霞', '女'));
用户适配器adapter=新用户适配器(this,R.layout.list_item,users);
listView.setAdapter(适配器);
如果我们将ArrayAdapter绑定的数据类型定义为对象,我们可以自由的传入任何类型的容器而不需要任何有关类型转换的操作!
ArrayAdapter不仅仅是可以显示文本视图,它当让也像是其他适配器一样,可以显示任何其他非文本视图的组件:
@覆盖
受保护的void onCreate(Bundle saved instancestate){
超级棒。oncreate(savedInstanceState);
setContentView(r . layout。活动_主);
ListView ListView=(ListView)this。findviewbyid(r . id。列表);
ListObject users=new ArrayListObject();
用户。增加(10);
用户。增加(11);
用户适配器adapter=新用户适配器(this,R.layout.list_item,
身份证信息,用户);
listView.setAdapter(适配器);
}
@覆盖
public boolean onCreateOptionsMenu(菜单菜单){
//膨胀菜单;如果操作栏存在,这会将项目添加到操作栏中。
getMenuInflater().inflate(R.menu.main,menu);
返回真实的
}
类用户适配器扩展了ArrayAdapterObject {
private int mResourceId
公共用户适配器(上下文上下文,int resourceId,
int textViewResourceId,ListObject用户){
super(context,resourceId,textViewResourceId,users);
this.mResourceId=resourceId
}
@覆盖
公共视图getView(int position,View convertView,ViewGroup parent) {
object user=getItem(position);
LayoutInflater inflater=getLayoutInflater();
视图视图=充气机。inflate(mResourceId,null);
TextView text=(TextView)视图。findviewbyid(r . id。info);
文字。settext(用户。tostring());
返回视图;
}
}
?可扩展标记语言版本='1.0 '编码='utf-8 '?
线性布局xmlns:Android=' http://模式。安卓。' com/apk/RES/Android '
Android:layout _ width=' match _ parent '
Android:layout _ height=' match _ parent '
安卓:方向='垂直'
纽扣
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 '/
/线性布局
如果我们的布局中需要其他组件,必须指定该布局中用于显示ArrayAdapter中数据的文本视图的身份证。
如果只是方便绑定数据的话,其实是没有必要专门独立个ArrayAdapter出来,只要覆写getView()就可以,正如使用容器就是为了方便大量数据的处理一样的道理,使用ArrayAdapter也是为了处理数据较大的情况,像是超过100条或者频繁动态增删数据时,就可以使用ArrayAdapter,而且,为了方便我们刷新UI,ArrayAdapter也提供了setNotifyOnChange()方法,这样可以降低用户界面的处理量,使得刷新用户界面更加快速,主要是通过停止对添加、插入、删除和清楚的的操作来实现这点。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。