欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android入门之ListView应用解析(二)

程序员文章站 2022-11-05 15:49:58
上一篇关于android中listview的介绍讲的是如何制作一个具有两行文本的自定义控件,作为listview的item的使用方法。本文接下来也是围绕listview和i...

上一篇关于android中listview的介绍讲的是如何制作一个具有两行文本的自定义控件,作为listview的item的使用方法。本文接下来也是围绕listview和item,更加深入地介绍它们的用法。

首先,先来看看本文代码运行的结果,本文的item比上一篇中的item多出左边的图标:

Android入门之ListView应用解析(二)

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;
 }
 }

}