ListView基本用法
2010-12-13 15:10 RayLee 阅读(853) 评论(0) 编辑 收藏 举报Android平台定义了ListView控件来显示一系列相关的数据项。对ListView而言,最重要的两方面:数据和显示样式。数据定义了该控件要显示的内容;显示样式定义了如何显示这些数据(文本或图片以及如何排列)。下面将介绍ListView的一些基本使用方法。
运行前,数据集合已知
ListAdapter类封装了数据本身与数据显示的一些实现细节,为开发者定义了一个更加抽象的方式。以最简单的ArrayAdapter<T>,给出一个例子说明。
UI定义:要使用ListView,xml文件中ListView的定义是必不可少的。
<?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" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add item" android:id="@+id/btnAdd" /> <ListView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/list" /> </LinearLayout>
第一步自然是要索引到ListView控件。
final ListView list = (ListView)findViewById(R.id.list);
如果已知要显示的数据集合是String[] items = {“One”, “Tow”, “Three”},通过构建一个包含该集合的ArrayAdapter并将其设置给ListView,一切就完成了。
public class MainActivity extends Activity { String[] items = {"One", "Two", "Three"}; ArrayAdapter adapter; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final ListView list = (ListView)findViewById(R.id.list); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items); list.setAdapter(adapter); } }
运行时,数据动态更新
大多数情况下,在运行时才知道要显示的数据集合。这就要用到ArrayAdapter的接口对数据动态操作了。
public class MainActivity extends Activity { int count = 0; ArrayAdapter adapter; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final ListView list = (ListView)findViewById(R.id.list); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); list.setAdapter(adapter); final Button btnAdd = (Button)findViewById(R.id.btnAdd); btnAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { count++; adapter.add("item" + count); } }); } }
当然,也可以显示的传入一个List<T>对象给ArrayAdapter。
public class MainActivity extends Activity { int count = 0; ArrayAdapter adapter; ArrayList<String> items = new ArrayList<String>(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final ListView list = (ListView)findViewById(R.id.list); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items); list.setAdapter(adapter); final Button btnAdd = (Button)findViewById(R.id.btnAdd); btnAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { count++; adapter.add("item" + count); } }); } }
这种情况下,adapter.add()和items.add()操作的是同一个List<T>对象,不同的是adapter.add()完成后会自动更新UI,items.add()之后还要显示的调用adapter.notifyDataSetChanged()来更新UI。
ListActivity
另外,还可以直接继承ListActivity。但要求定义UI的xml文件必须包含一个id为android:id=”@android:id/list”的ListView控件。
<?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" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add item" android:id="@+id/btnAdd" /> <ListView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@android:id/list" /> </LinearLayout>
public class MainActivity extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }