Android入门之ListView应用解析(二)
程序员文章站
2022-11-05 15:49:58
上一篇关于android中listview的介绍讲的是如何制作一个具有两行文本的自定义控件,作为listview的item的使用方法。本文接下来也是围绕listview和i...
上一篇关于android中listview的介绍讲的是如何制作一个具有两行文本的自定义控件,作为listview的item的使用方法。本文接下来也是围绕listview和item,更加深入地介绍它们的用法。
首先,先来看看本文代码运行的结果,本文的item比上一篇中的item多出左边的图标:
main.xml的源代码,跟上一篇的一样,这里就不作解释了,直接贴出item.xml的代码,就是它实现imageitem的ui:
<?xml version="1.0" encoding="utf-8"?> <relativelayout android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:paddingbottom="4dip" android:paddingleft="12dip"> <imageview android:layout_width="wrap_content" android:id="@+id/itemimage" android:layout_height="fill_parent"> </imageview> <textview android:text="textview01" android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/itemtitle" android:layout_torightof="@+id/itemimage" android:textsize="20dip"> </textview> <textview android:text="textview02" android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/itemtext" android:layout_torightof="@+id/itemimage" android:layout_below="@+id/itemtitle"> </textview> </relativelayout>
解释一下 item.xml的代码:这里使用了relativelayout布局,控件的关键的属性是:
itemtitle的属性 android:layout_torightof="@+id/itemimage" ,itemtitle在itemimage的右边;
itemtext的属性 android:layout_torightof="@+id/itemimage",itemtext在itemimage的右边, android:layout_below="@+id/itemtitle", itemtext 在 itemtitle的下面。
最后,贴出java的源代码,代码中的重点是layoutinflate的用法。layoutinflate的使用方法如下:
layoutinflater的作用是,把一个view的对象与xml布局文件关联并实例化。
view的对象实例化之后,可以通过findviewbyid()查找布局文件中的指定id的组件。
java代码如下:
package com.testlistview; import android.app.activity; import android.content.context; import android.os.bundle; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.baseadapter; import android.widget.imageview; import android.widget.listview; import android.widget.textview; public class testlistview extends activity { listview listview; string[] titles={"标题1","标题2","标题3","标题4"}; string[] texts={"文本内容a","文本内容b","文本内容c","文本内容d"}; int[] resids={r.drawable.icon,r.drawable.icon,r.drawable.icon,r.drawable.icon}; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); this.settitle("baseadapter for listview"); listview=(listview)this.findviewbyid(r.id.listview1); listview.setadapter(new listviewadapter(titles,texts,resids)); } public class listviewadapter extends baseadapter { view[] itemviews; public listviewadapter(string[] itemtitles, string[] itemtexts, int[] itemimageres) { itemviews = new view[itemtitles.length]; for (int i = 0; i < itemviews.length; i++) { itemviews[i] = makeitemview(itemtitles[i], itemtexts[i], itemimageres[i]); } } public int getcount() { return itemviews.length; } public view getitem(int position) { return itemviews[position]; } public long getitemid(int position) { return position; } private view makeitemview(string strtitle, string strtext, int resid) { layoutinflater inflater = (layoutinflater) testlistview.this .getsystemservice(context.layout_inflater_service); // 使用view的对象itemview与r.layout.item关联 view itemview = inflater.inflate(r.layout.item, null); // 通过findviewbyid()方法实例r.layout.item内各组件 textview title = (textview) itemview.findviewbyid(r.id.itemtitle); title.settext(strtitle); textview text = (textview) itemview.findviewbyid(r.id.itemtext); text.settext(strtext); imageview image = (imageview) itemview.findviewbyid(r.id.itemimage); image.setimageresource(resid); return itemview; } public view getview(int position, view convertview, viewgroup parent) { if (convertview == null) return itemviews[position]; return convertview; } } }