其实我们不继承ListActivity也可以实现list的效果。
参考示例:
1. 创建layout文件,res/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="match_parent" android:layout_height="match_parent" android:paddingLeft="8dp" android:paddingRight="8dp"> <TextView android:id="@+id/android:title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="The following is a list:" /> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#00FF00" android:layout_weight="1" android:drawSelectorOnTop="false" /> </LinearLayout>
2. 创建Activity对应的Java代码,ListActivityDemo.java,如下:
package com.xeedroid;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
/**
* 继承Activity,not ListActivity
*/
public class ListActivityDemo extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 加载layout资源文件,其中包含一个ListView
setContentView(R.layout.main);
// 为ListView绑定数据
ListView lv = (ListView) findViewById(R.id.lv);
List<String> items = fillList();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, items);
lv.setAdapter(adapter);
OnItemClickListener listener = new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
setTitle(parent.getItemAtPosition(position).toString());
}
};
lv.setOnItemClickListener(listener);
}
private List<String> fillList() {
List<String> items = new ArrayList<String>();
items.add("星期一");
items.add("星期二");
items.add("星期三");
items.add("星期四");
items.add("星期五");
items.add("星期六");
items.add("星期日");
// items.clear();
return items;
}
}
3. 运行效果如下,点击列表中的选项,Activity标题会随之改变:
由于ListActivityDemo继承的不是ListActivity,即使在资源文件创建了id为"@id/android:list"的ListView或者id为"@id/android:empty"的view,都不会起到在ListActivity中的作用,因为没有ListActivity去管理它们。
总结:在上面的示例中,我们只是用到了ListView这个控件实现了列表的效果,而没有用ListActivity去对ListView进行自动管理,所以失去了很多方便之处,例如,我们需要手动将listview和listener进行绑定,lv.setOnItemClickListener(listener)。