ListView

Android应用开发中,经常会用到列表形式ListView,在Android库中,实现ListView的方式也比较多,下面分别介绍一下各种ListView的实现。

我所列举了4ListView,如下所列:

231905404.png


1.使用ArrayAdapter来实现ListView

这种实现ListView是最容易实现,但最不容易扩展的实现方法。

首先不需要我们自己写布局文件,它所使用的布局文件是Android内置的。看下面代码:


 
  
  1. publicclass ArrayAdapterDemoActivity extends Activity {//继承Activity类

  2. private ListView listView = null;

  3. List<String> list = new ArrayList<String>();//用一个ArrayList来存放数据

  4. @Override

  5. protectedvoid onCreate(Bundle savedInstanceState) {

  6. // TODO Auto-generated method stub

  7. super.onCreate(savedInstanceState);

  8. listView = new ListView(this);

  9. list = getData();//获得数据

  10. listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,list));//设置Adapter,将布局和数据传入

  11. setContentView(listView);

  12. listView.setOnItemClickListener(new OnItemClickListener() {

  13. @Override

  14. publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2,

  15. long arg3) {

  16. // TODO Auto-generated method stub

  17. //这里可以设置响应的事件

  18. Toast.makeText(ArrayAdapterDemoActivity.this, "This is "+String.valueOf(list.get(arg2)), Toast.LENGTH_SHORT).show();

  19. }

  20. });

  21. }

  22. private List<String> getData(){

  23. list.add("Jack");

  24. list.add("Bob");

  25. list.add("Theron");

  26. return list;

  27. }

  28. }


首先实现了Activity类,重写了onCreate(Bundle savedInstanceState)方法,在方法内创建一个ListView的对象,用一个ArrayList来存放需要显示的数据。使用listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,list));来对ListView对象设置Adapter、布局和数据。其中android.R.layout.simple_expandable_list_item_1Android自带默认的布局文件,list为设置的数据。最后,使用setContentView(listView);ListView设置到当前的Activity中。


当然,可以对ListView对象绑定事件监听器,我这里使用了匿名内部类来对事件进行绑定,在onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)的方法内可以对需要实现的响应进行自己设置。

可以看到,上述的方式比较容易,但变化很小,每一个条目只能显示一行字。下面是运行效果:


232030445.png


2. 使用SimpleCursorAdapter来实现ListView

使用这种方式来实现ListView的话,一般与手机的数据库需要结合使用,比如:从手机的通讯录中得到列表等。

同样不需要自己创建布局文件,使用Android默认自带的即可。

如下代码片段所示:

 
  
  1. publicclass SimpleCursorAdapterDemoActivity extends Activity {

  2. private ListView listView;

  3. private Cursor cursor = null;

  4. @Override

  5. publicvoid onCreate(Bundle savedInstanceState) {

  6. super.onCreate(savedInstanceState);

  7. listView = new ListView(this);

  8. cursor = getContentResolver().query(

  9. ContactsContract.Contacts.CONTENT_URI, null, null, null, null);//设置一个扫描通讯录的游标

  10. startManagingCursor(cursor);//启动游标

  11. ListAdapter listAdapter = new SimpleCursorAdapter(this,

  12. android.R.layout.simple_expandable_list_item_1, cursor,

  13. new String[] { ContactsContract.Contacts.DISPLAY_NAME },

  14. newint[] { android.R.id.text1 });//SimpleCursorAdapter有五个参数,第一个是当前的Activity上下文对象;第二个是ListView的布局文件,此处为默认的布局文件;第三个是游标对象;第四个是ListView中每一列分别显示什么内容,这里显示的是名字;第五个是每一列的样式id,此处为默认的样式

  15. listView.setAdapter(listAdapter); //将SimpleCursorAdapter设置给ListView

  16. setContentView(listView);//将ListView显示在Activity上

  17. listView.setOnItemClickListener(new OnItemClickListener() {//为ListView绑定事件监听器

  18. @Override

  19. publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2,

  20. long arg3) {

  21. // TODO Auto-generated method stub

  22. Toast.makeText(SimpleCursorAdapterDemoActivity.this,

  23. getList().get(arg2).getName(), Toast.LENGTH_SHORT)

  24. .show();

  25. }

  26. });

  27. }

  28. public ArrayList<Contactor> getList() {//从手机中获得通讯录的内容

  29. ArrayList<Contactor> list = new ArrayList<Contactor>();

  30. String[] columns = new String[] { ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER };

  31. Cursor cursor = SimpleCursorAdapterDemoActivity.this.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,

  32. columns, null, null, null);

  33. while (cursor.moveToNext()) {

  34. Contactor bean = new Contactor();

  35. bean.setName(cursor.getString(0));

  36. bean.setPhone(cursor.getString(1));

  37. list.add(bean);

  38. }

  39. cursor.close();

  40. return list;

  41. }

  42. }

  43. class Contactor{//每个通讯录的人都是一个Contactor对象

  44. String name;

  45. public String getName() {

  46. return name;

  47. }

  48. publicvoid setName(String name) {

  49. this.name = name;

  50. }

  51. public String getPhone() {

  52. return phone;

  53. }

  54. publicvoid setPhone(String phone) {

  55. this.phone = phone;

  56. }

  57. String phone;

  58. }


上面有两个类,一个是Contactor类,是用于存放每个联系人的姓名和电话号码。另一个是继承了Activity的类,首先需要创建一个Cursor对象,用来扫描通讯录的内容,然后创建一个SimpleCursorAdapter对象,其构造函数需要5个参数,在上面程序中已经说明了。接着把SimpleCursorAdapter对象设置给ListView对象,最后把ListViewActivity上显示。


可以看出,使用SimpleCursorAdapter多用于对手机数据库的内容进行列表显示。运行效果如下图,下图的两个条目为模拟器通讯录中的两个条目:

232151448.png

以上是前两个例子,另两个稍等,在ListView(下)中说明,示例程序也在下一篇中添加附件。

如果我的文章给与了你帮助,就不妨请我喝杯咖啡吧,点击-> btn-index.png