ListView 是 Android 系统中以列表形式来显示数据的控件。
使用 ListView 控件需要下面三个要素:
l 用来显示列表的 View
l 数据源:需要被显示在列表中的内容,可以是图片,文字等
l 适配器。将数据映射到 ListView 的媒介。 ArrayAdapter , SimpleAdapter , SimpleCursorAdapter , BaseAdapter 等。
第一种情况:如果只是在列表中显示一系列文本数据的我们可以 ArrayAdapter 来实现。
实现效果图如下:
先定义实例化视图时需要用到的包含一个 TextView 的 layout(list_textview_item.xml) 文件
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/sms1_text1"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
android:textAppearance="?android:attr/textAppearanceLarge"
android:gravity="center_vertical"
/>
ListViewSampleActivity.java
public class ListViewSampleActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
ListView listView = new ListView( this );
listView.setAdapter(new ArrayAdapter(this, R.layout.list_textview_item, getResources()
.getStringArray(R.array.ListViewTitleArray)));
setContentView(listView);
}
}
第二种:我们需要在列表中显示比较复杂的信息,下面例子中每行包含了一个图片,两个文本控件。 实现效果图如下:
定义主界面的 layout 文件 main.xml 如下:
<? xml version = "1.0" encoding = "utf-8" ?>
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:orientation = "vertical"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
>
< ListView
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:id = "@+id/AndroidSampleListView" />
</ LinearLayout >
定义每一个列表项布局的 layout 文件 complex_list_item.xml 如下:
<? xml version = "1.0" encoding = "utf-8" ?>
< RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
>
< ImageView
android:id = "@+id/list_item_img"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_alignParentTop = "true"
android:layout_alignParentLeft = "true"
android:scaleType = "fitCenter"
/>
< TextView
android:id = "@+id/list_item_title"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:singleLine = "true"
android:layout_alignParentTop = "true"
android:layout_toRightOf = "@id/list_item_img"
android:paddingLeft = "10dp"
android:textAppearance = "?android:attr/textAppearanceMedium"
/>
< TextView
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:id = "@+id/list_item_content"
android:singleLine = "true"
android:paddingLeft = "10dp"
android:layout_toRightOf = "@id/list_item_img"
android:layout_below = "@id/list_item_title"
android:textAppearance = "?android:attr/textAppearanceSmall"
/>
</ RelativeLayout >
Java 代码部分:
ListViewSampleActivity .java
package com.android.sample;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
public class ListViewSampleActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. main );
ListView listView = (ListView) findViewById(R.id. AndroidSampleListView );
ListViewSampleAdapter listViewAdapter = new ListViewSampleAdapter( this );
listView.setAdapter(listViewAdapter );
}
}
ListViewSampleAdapter.java
package com.android.sample;
import android.content.res.Resources;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
public class ListViewSampleAdapter extends BaseAdapter {
private ListViewSampleActivity mContext;
private String mListViewTitilArrays[];
private String mListViewContentArrays[];
private Resources mResource;
public ListViewSampleAdapter(ListViewSampleActivity listActivity) {
mContext = listActivity;
mResource = mContext.getResources();
mListViewTitilArrays = mResource.getStringArray(
R.array.ListViewTitleArray);
mListViewContentArrays = mResource.getStringArray(R.array.ListViewContentArray);
}
@Override
public int getCount() {
return mListViewTitilArrays.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ListViewSampleItem listItem;
if (null != convertView)
{
listItem = (ListViewSampleItem)convertView;
}
else
{
listItem = new ListViewSampleItem(mContext);
listItem.setTitle(mListViewTitilArrays[position]);
listItem.setContent(mListViewContentArrays[position]);
listItem.setImage(R.drawable.img_dog);
}
return listItem;
}
}
ListViewSampleItem.java
package com.android.sample;
import android.content.Context;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class ListViewSampleItem extends LinearLayout {
private TextView mTitle;
private TextView mContent;
private ImageView mImage;
public ListViewSampleItem(Context context) {
super(context);
LayoutInflater factory = LayoutInflater.from(context);
factory.inflate(R.layout.complex_list_item, this);
mTitle = (TextView)findViewById(R.id.list_item_title);
mContent = (TextView)findViewById(R.id.list_item_content);
mImage = (ImageView)findViewById(R.id.list_item_img);
}
public void setTitle(String title)
{
mTitle.setText(title);
}
public void setContent(String content)
{
mContent.setText(content);
}
public void setImage(int id) {
mImage.setImageResource(id);
}
}