,,详解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(适配器);

}

}

总结

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

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • word文档无法编辑是怎么回事-
  • 华为手机怎么设置返回键(华为手机下面的三个按键设置方法)
  • lumia950怎么样(Lumia950体验分享)
  • otg连接是什么意思(OTG连接手机方法)
  • 笔记本触摸板怎么右键(笔记本电脑触控板手势操作设置)
  • 真我x7怎么样(realme X7 系列体验)
  • 苹果的A16处理器有多强(苹果的A16处理器的介绍)
  • 小米互传怎么用(小米手机的连接与共享教程)
  • 怎么设置电脑桌面图标自动对齐 设置电脑桌面自动整理图标的方法
  • 宽带错误651最简单解决方法(处理宽带错误651的措施)
  • 大学生手机有什么推荐(大学生换手机攻略)
  • 天玑1100和骁龙778g哪个好(骁龙778G、天玑900、天玑1100购选建议)
  • yum update 升级报错的解决办法
  • Windows10禁用屏保教程
  • 连接wifi显示无互联网连接怎么办(无线连上了却不能上网处理绝招)
  • 留言与评论(共有 条评论)
       
    验证码: