ListView用来实现列表显示,要通过一个Adapter来构建显示内容,可以使用的Adapter有三种,ArrayAdapter,SimpleAdapter和CursorAdapter。
首先介绍一个ListView的简单用法,当我们在一个Activity只需要显示一个ListView时可以这样使用:
public class listView extends ListActivity{
String[] COUNTRIES=new String[]{
"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
"Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
"Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
"Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
"Belize", "Benin", "Bermuda", "Bhutan", "Bolivia","......"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//首先通过ArrayAdapter构建要显示的数据及其格式,数据存在COUNTRIES中,
//每个数据item的格式在list_item.xml文件中
setListAdapter(new ArrayAdapter<String>(this,R.layout.list_item,COUNTRIES));
ListView listView=getListView();
//开启文字过滤功能,例如当我们输入一个Aus,他会自动帮我们找出以Aus为开头的item
listView.setTextFilterEnabled(true);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),
((TextView)arg1).getText(), Toast.LENGTH_SHORT).show();
}
});
}
}
list_item.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dip"
android:textSize="16sp" >
</TextView>
运行效果如下图所示:
下面介绍一个ListView更复杂一点的用法。
类的源码如下:
package lhp.widgetStudy;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class ListViewActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.listview);
ListView listView=(ListView)findViewById(R.id.listView);
ArrayList<HashMap<String,Object>> listViewItem=new ArrayList<HashMap<String,Object>>();
for(int i=0;i<10;i++){
HashMap<String,Object> map=new HashMap<String,Object>();
map.put("ItemImage", R.drawable.ic_launcher);
map.put("ItemTitle", "This is title...");
map.put("ItemText", "This is text...");
listViewItem.add(map);
}
SimpleAdapter simpleAdapter=new SimpleAdapter(this,
listViewItem, //数据的来源
R.layout.list_view_item, //每个条目的布局文件
new String[]{"ItemImage","ItemTitle","ItemText"},
new int[]{R.id.iamgeView,R.id.textView01,R.id.textView02});
listView.setAdapter(simpleAdapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "haha", Toast.LENGTH_SHORT).show();
}
});
}
}
整个Activity的布局文件listView.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/listView" />
</LinearLayout>
每个条目(item)的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/textView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="22dip"
android:layout_toRightOf="@+id/imageView" />
<TextView
android:id="@+id/textView02"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/iamgeView"
android:layout_below="@+id/textView01"
android:layout_alignLeft="@+id/textView01"/>
</RelativeLayout>