详解ListView中多种item的实现方式

详解ListView中多种item的实现方式

这篇文章主要给大家介绍了关于列表视图中多种项目的实现方式,文中通过示例代码介绍的很详细,有需要的朋友们可以参考借鉴,下面来一起看看吧。

大家都知道在实际开发时,对列表视图的使用比较频繁,其表现也非常复杂。本文将通过实例介绍列表视图中多种项目的实现方式,下面来一起看看吧。

使用ListView一般步骤:

设置显示的列表视图,设置显示的每一项项目的视角布局文件

设置每个项目显示的数据

将数据显示的视角中,继承基本适配器,重写getCount()、getItemId()、getItem()、getView()这个四个方法;

如果实现ListView的多种类型item的显示,那么就要再重写两个方法

getViewTypeCount():得到总共项目的显示的种类数,

getItemViewType():得到每个项目显示的类型;为整型数据;

实现的效果如下:

一、准备填充的数据模型

1、解析json数据源

json数据放在表示留数下的生的文件夹下:

[

{

字母: A ,

城市:[

安庆,

安徽,

安全

]

},

{

字母: B ,

城市:[

包头,

宝钢,

渤海,

本溪,

蚌埠

]

},

{

字母: C ,

城市:[

长春,

长城,

长沙,

常州,

郴州,

重庆

]

},

{

字母: D ,

城市:[

东莞,

东山,

大连,

大庆

]

}

]

2、建立数据对象

可以看到这个列表视图有两种类型,一个是显示字母,一个是显示内容,所以数据模型的建立如下,使用(同国际组织)国际组织型的类型对数据类型进行标识;标识的值必须从0开始计数,有两种类型,那么就取0,1这两个值;

公共类StringBean {

字符串字母;

弦城;

(同Internationalorganizations)国际组织类型;

公共字符串getLetter() {

回函;

}

公共void setLetter(字符串){

这封信=信

}

公共字符串getCity() {

返回城市;

}

public void setCity(String city) {

这个城市=城市

}

public int getType() {

返回类型;

}

公共void setType(int类型){

this.type=type

}

@覆盖

公共字符串toString() {

返回" StringBean{ "

字母= 字母

,city= city

,type= type

};

}

}

解析json数据填充成集合数据源这里就不提供了

二、准备两种项目类型的布局文件

1、显示字母的type_layout.xml的布局文件

?可扩展标记语言版本=1.0 编码=utf-8 ?

线性布局xmlns:Android= http://模式。安卓。 com/apk/RES/Android

Android:layout _ width= match _ parent

Android:layout _ height= match _ parent

安卓:方向=垂直

文本视图

android:id=@ id/tvType

Android:layout _ width= match _ parent

Android:layout _ height= wrap _ content

android:background=#999

android:text=A

android:textSize=20sp /

/线性布局

2、显示城市city_layout.xml的布局文件

?可扩展标记语言版本=1.0 编码=utf-8 ?

线性布局

xmlns:Android= http://模式。安卓。 com/apk/RES/Android

安卓:方向=垂直

Android:layout _ width= match _ parent

Android:layout _ height= match _ parent

文本视图

android:id=@ id/tvCity

Android:layout _ width= match _ parent

Android:layout _ height= wrap _ content

android:textSize=20sp

/

/线性布局

三、设置显示ListView的数据和布局的适配器

这里的列表视图的项目有两种类型,所以getViewTypeCount()返回2;

在getItemViewType()返回的是每次绘制每一个项目的视角显示的是何种类型,在数据模型StringBean有设置;

关于类型的整型设置,可能有很多人认为只要是任意的整型数字就可以了,其实不是这样

项目类型标识值必须从0开始计数,如果项目有两种类型,那么类型标识值就是0,1

如果是不从0开始标识,那么会报ArrayIndexOutOfBoundsException数组下标越界的异常

公共类列表适配器扩展基本适配器{

ArrayListStringBeanlist

语境语境;

布局充气机;

列表适配器(ArrayListStringBeanlist,上下文上下文){

这个列表=列表

this.context=上下文

inflater=(LayoutInflater)上下文。getsystem服务(上下文.LAYOUT _ INFLATER _ SERVICE);

}

@覆盖

public int getCount() {

返回列表。size();

}

@覆盖

公共对象getItem(int i) {

返回列表。get(I);

}

@覆盖

public long getItemId(int i) {

返回我;

}

@覆盖

公共视图getView(int position,View converView,ViewGroup viewGroup) {

视图视图=视图视图

StringBean bean=list。get(位置);

int type=bean。gettype();

if(type==0){

if(view==null){

视图=充气机。膨胀(r .布局。type _ layout,viewGroup,false);

}

TextView type _ text=(TextView)视图。findviewbyid(r . id。电视类型);

类型_文本。settext(bean。getletter());

}else if (type==1){

if(converView==null){

视图=充气机。膨胀(r .布局。city _ layout,viewGroup,false);

}

TextView city _ text=(TextView)视图。findviewbyid(r . id。电视城);

city _ text。settext(bean。get city());

}

返回视图;

}

@覆盖

public int getItemViewType(int I){

返回list.get(i).getType();

}

@覆盖

public int getViewTypeCount() {

return 2;

}

}

四、设置ListView

列表视图的布局文件,在这里就不给出了

公共类主要活动扩展AppCompatActivity {

ArrayListStringBean列表;

列表视图列表视图;

@覆盖

受保护的void onCreate(Bundle saved instancestate){

超级棒。oncreate(savedInstanceState);

setContentView(r . layout。活动_主);

init bean();

init view();

}

public void initBean(){

UserDao Dao=new UserDao(this);

list=Dao。getlist();

}

public void initView(){

listView=(listView)findViewById(r . id。listView);

列表适配器adapter=新列表适配器(list,this);

listView.setAdapter(适配器);

}

}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

详解ListView中多种item的实现方式