代码改变世界

AdapterView及其子类之三:基于ListView及ArrayAdapter实现列表

2013-11-19 22:35  jediael  阅读(156)  评论(0编辑  收藏  举报

见归档项目ListViewDemo.zip.

基本步骤如下:

1、创建主布局文件,里面包含一个ListView元素。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

   
    <ListView 
        android:id="@+id/listview"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:divider="#00ff00"
        android:dividerHeight="2dp"
        android:headerDividersEnabled="false"
         />

</RelativeLayout>

2、创建一个TextView,用于指定每一个选项的格式

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="20dp" 
    android:background="#0000ff">

</TextView>
3、创建主类:

package com.ljh.listviewdemo;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.app.Activity;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		

		// (1)创建要显示的文本内容
		String[] arr = { "java", "c/c++", "python", "ruby" };
		//(2)与使用ListActivity的最大区别:使用findViewById得到一个ListView
		ListView lv = (ListView) findViewById(R.id.listview);
		
		// (3)创建ArrayAdapter,其中第二个参数resource:The resource ID for a layout file
		// containing a TextView to use when instantiating views.是要以一个layout作为
		// 参数,且此layout需要包含textview。		
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
				R.layout.list, arr);
		// (4)为ListActivity设置adapter.
		lv.setAdapter(adapter);
		
		lv.setOnItemClickListener(new OnItemClickListener(){

			//定义当某个选项被点击时的操作。
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Toast.makeText(MainActivity.this, position+" item is clicked.", Toast.LENGTH_LONG).show();
				
			}
			
		});
		
	}
	
}


使用ListActivity或ListView创建列表的区别:

1、用途区别:二者都只能支持TextView类型,更强大的支持能力请见SimpleAdapter。

ListActivity只能支持创建单个列表,而ListView可在同一页面创建多个列表,只要在布局文件中定义多个ListView元素即可。

2、创建时的区别:

ListActivity方法是继承了ListActivity,从而可以直接调用setListAdapter()及onListItemClick().

ListView方法必须通过findViewById()得到一个ListView,然后再通过其调用setListAdapter(),以及设置OfnListItemClick接口。