android学习之ListView如何使用

                                  2014-08-31

标签:数据源 listview android 移动开发 ListActivity

ListView是Android一系列组件之一,它以垂直列表的方式列出所需的列表项。实现方式有两种:  * 第一种:使用ListView组件  * 第二种:当前的Activity继承ListActivity

ListView是需要绑定数据源的----->ArrayAdapter、SimpleAdapter、SimpleCursorAdapter

需要注意的是SimpleCursorAdapter要以数据库作为数据源的时候才使用。

来自SDK的描述:

A view that shows items in a vertically scrolling list. The items come from the ListAdapter associated with this view.

接下来就三种不同的数据源我写了一个例子,和大家一起来好好学习一下ListView。

首先,新建一个Android项目--->取名ListViewDemo

MainActivity.java的代码如下:

  1. public class MainActivity extends Activity implements OnClickListener{
  2. private Button btnArray,btnSimple,btnSimpleCursor;
  3. /** Called when the activity is first created. */
  4. @Override
  5. public void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.main);
  8. getWidgetInstance();
  9. btnArray.setOnClickListener(this);
  10. btnSimple.setOnClickListener(this);
  11. btnSimpleCursor.setOnClickListener(this);
  12. }
  13. public void getWidgetInstance() {
  14. btnArray = (Button)findViewById(R.id.btnArray);
  15. btnSimple = (Button)findViewById(R.id.btnSimple);
  16. btnSimpleCursor = (Button)findViewById(R.id.btnSimpleCursor);
  17. }
  18. @Override
  19. public void onClick(View v) {
  20. int id = v.getId();
  21. switch(id) {
  22. case R.id.btnArray:
  23. Intent intent_array = new Intent(MainActivity.this,ArrayAdapterActivity.class);
  24. MainActivity.this.startActivity(intent_array);
  25. break;
  26. case R.id.btnSimple:
  27. Intent intent_simple = new Intent(MainActivity.this,SimpleAdapterActivity.class);
  28. MainActivity.this.startActivity(intent_simple);
  29. break;
  30. case R.id.btnSimpleCursor:
  31. Intent intent_cursor = new Intent(MainActivity.this,SimpleCursorAdapterActivity.class);
  32. MainActivity.this.startActivity(intent_cursor);
  33. break;
  34. }
  35. }
  36. }

main.xml的布局:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <TextView
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:text="ListView使用示例"
  11. android:gravity="center"
  12. android:textColor="#EEE"
  13. android:textStyle="bold"
  14. android:textSize="25sp"
  15. />
  16. <Button
  17. android:id="@+id/btnArray"
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:text="show ArrayAdapter"
  21. />
  22. <Button
  23. android:id="@+id/btnSimple"
  24. android:layout_width="wrap_content"
  25. android:layout_height="wrap_content"
  26. android:text="show SimpleAdapter"
  27. />
  28. <Button
  29. android:id="@+id/btnSimpleCursor"
  30. android:layout_width="wrap_content"
  31. android:layout_height="wrap_content"
  32. android:text="show SimpleCursorAdapter"
  33. />
  34. </LinearLayout>

主界面有三个Button,每一个Button对应相应的数据源,显示出ListActivity。

主界面截图:

接着,编写三个不同数据源的Activity

第一种:ArrayAdapter

ArrayAdapter是三种数据源中最简单的Adapter,只能显示一行文字

ArrayAdapter.java的代码如下:

  1. public class ArrayAdapterActivity extends ListActivity {
  2. @Override
  3. public void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. //列表项的数据
  6. String[] strs = {"1","2","3","4","5"};
  7. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,strs);
  8. setListAdapter(adapter);
  9. }
  10. }

运行结果:

第二种:SimpleAdapterActivity

SimpleAdapterActivity需要自定义每一项显示的布局方式:

所以simple.xml的代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <ImageView
  8. android:id="@+id/img"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:layout_margin="5dp"
  12. />
  13. <TextView
  14. android:id="@+id/title"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:textColor="#ffffff"
  18. android:textSize="20sp"
  19. />
  20. </LinearLayout>

SimpleAdapterActivity.java代码如下:

  1. public class SimpleAdapterActivity extends ListActivity {
  2. @Override
  3. public void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.simple, new String[] { "title",  "img" }, new int[] { R.id.title, R.id.img });
  6. setListAdapter(adapter);
  7. }
  8. private List<Map<String, Object>> getData() {
  9. //map.put(参数名字,参数值)
  10. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  11. Map<String, Object> map = new HashMap<String, Object>();
  12. map.put("title", "摩托罗拉");
  13. map.put("img", R.drawable.icon);
  14. list.add(map);
  15. map = new HashMap<String, Object>();
  16. map.put("title", "诺基亚");
  17. map.put("img", R.drawable.icon);
  18. list.add(map);
  19. map = new HashMap<String, Object>();
  20. map.put("title", "三星");
  21. map.put("img", R.drawable.icon);
  22. list.add(map);
  23. return list;
  24. }
  25. }

运行结果如下:

第三种:SimpleCursorAdapterActivity

SimpleCursorAdapterActivity是依赖于数据库的一种数据源,这里为了方便我就不重新建一个数据库,然后插入数据了,我就用读取联系人姓名的方式为例和大家做一个简单的介绍。

SimpleCursorAdapterActivity.xml代码如下:

  1. public class SimpleCursorAdapterActivity extends ListActivity {
  2. @Override
  3. public void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. //获得一个指向系统通讯录数据库的Cursor对象获得数据来源
  6. Cursor cur = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
  7. startManagingCursor(cur);
  8. //实例化列表适配器
  9. ListAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cur, new String[] {People.NAME}, new int[] {android.R.id.text1});
  10. setListAdapter(adapter);
  11. }
  12. }

这里特别需要注意的一点是:不要忘了在AndroidManifest.xml文件中加入权限

<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>

运行结果如下图:

至此所有关于ListView的简单知识点介绍完毕。欢迎大家留言交流。

时间: 2024-10-25 19:17:45

android学习之ListView如何使用的相关文章

[Android学习笔记]ListView中含有Button导致无法响应onItemClick回调的解决办法

转自:http://www.cnblogs.com/eyu8874521/archive/2012/10/17/2727882.html 问题描述: 当ListView的Item中的控件只是一些展示类控件时(比如TextView),注册ListView的监听setOnItemClickListener之后,当点击Item时候会触发onItemClick回调. 但是,当Item中存在Button(继承于Button)的控件时,onItemClick回调不会被触发. 解决方案: 在Item的布局文件

Android学习之listview的下拉刷新、上拉载入

本例是在上例的基础上完成的.本例实现的listview上拉载入.下拉刷新功能,是在开源网站上别人写好的listview,主要是对listview的控件进行重写,添加了footer和header. 1.listview_footer listview_footer是listview的底部. 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http

Android学习之——ListView

背景知识 ListView在Android应用中使用非常广泛,手机上必备的微博.网易新闻等,都使用了ListView.                    定义 ListView是一个展示可滚动项的列表的视图集合(View Group).通过适配器(Adapter)从内容源(例如一个数组或数据库查询)取得内容 然后将每个项转化为呈现在列表中的View,列表项自动地被插入到列表中. Demo ListView的实现过程: 准备数据---->使用动态数组保存数据----->构建Adapter(适

Android学习笔记ListView

在手机实际应用中,我们常常需要列表来显示我们的信息,比如我们的联系人列表,短信信息列表等.在Android中通过ListView来实现. ListView 的XML属性 属性名称 描述 android:choiceMode 规定此ListView所使用的选择模式.缺省状态下,list没有选择模式.属性值必须设置为下列常量之一: none,值为0,表示无选择模式: singlechoice,值为1,表示最多可以有一项被选中: multichoice,值为2,表示可以多项被选中. android:d

Android学习笔记——ListView

该工程的功能是实现在一个activity中显示一个表格 以下代码是MainActivity.java中的代码 package com.example.listview; import java.util.ArrayList; import java.util.HashMap; import android.app.ListActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuIt

Android学习—解决ListView部分内容被Tabhost遮盖问题

问题:tabhost固定在底部,某个tab中存在Listview,运行起来后发现如果listview中的列表内容比较多(超过一屏时),就会出现部分内容被tabhost遮盖了. 原Listview布局文件 <ListView         android:id="@+id/listBudgetSet"         android:layout_width="match_parent"         android:layout_height="

Android学习之——ListView下拉刷新

背景知识 ListView使用非常广泛,对于使用ListView的应用来说,下拉刷新是必不可少要实现的功能. 我们常用的微博.网易新闻,搜狐新闻都使用了这一功能,如下图所示.     微博 搜狐新闻 具体学习: 首先分析下拉刷新的具体操作过程: 用户手指在ListView上按下并往下拉----->出现一个提示的View在ListView顶部----->ListView内容更新,顶部的提示View消失    具体实现步骤:    1.创建继承自ListView的RefreshListView,并

Android学习系列(17)--App列表之圆角ListView(续)

http://www.cnblogs.com/qianxudetianxia/archive/2011/09/19/2068760.html 本来这篇文章想并到上篇Android学习系列(16)--App列表之圆角ListView中的,但是若是如此就让大家错过一篇新的好的文章,着实可惜.上篇中我们使用shape,corners,gradient实现了一个渐变的圆角效果,但是在完文之后的实践中,我发现有时效果不甚满意,选中和放手的事件监听没有去正确的判断,然后渐变效果也比较单一,性能也觉得不是很快

Android学习---ListView的点击事件,simpleAdapter和arrayadapter的原理和使用 - Hi_Amos

如题,本文将介绍 listview的点击事件,simpleAdapter和arrayadapter的原理和使用. 1.ListView的注册点击事件 //注册点击事件 personListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { /** * * @param parent 当前ListView * @param view 代表当前被点击的条目 * @param position 当前条目的位置 * @p