ListView与Sqlite数据库绑定步骤:

1.将Sqlite数据库的内容查询出来并放入数组列表中,形成ListView的数据源;

2.适配器绑定数据源,显示在ListView item中。

本文实现的ListView与Sqlite数据绑定的功能如下图-1

图-1 ListView与Sqlite数据绑定的功能界面

本例主要实现的是一个学生数据表(Sqlite数据库)与ListView控件绑定数据的功能。

数据库为user.db,学生表为student,学生表包含的字段有:id,username,birthday,image。

image放在android的资源文件内。初始化时,自动创建数据库,用户表并插入三条用户数据,以作为Listview的数据源。

通过SimpleAdapter适配器与ListView控件绑定。

关于ListView与SimpleAdapter数据绑定,以及Sqlite数据库的创建,表的创建,表的操作,在本博客中有所叙述,这里不再叙述。可以说本文是将ListView使用与Sqlite使用相结合的结果,只是有更多的细节需要注意。

除了绑定数据库,还增加一个ListView长按Item选项的事件操作,本例长按ListView数据选项后会弹出一个询问的对话框,询问是否删除当前选项的数据表的一条数据。实现Listview长按响应事件,需要实现OnCreateContextMenuListener类的方法。通过AdapterView.AdapterContextMenuInfo类获取选项的相应位置,也就是数据源的具体数据,获取选项位置后,可以提取相应选项的内容进而执行相关的操作。

图片添加如下图

1.类文件

ListView_SqliteActivity.java

[java] view
plain
copy

  1. package codyy.liuyong;
[java] view
plain
copy

  1. import java.util.ArrayList;
  2. import java.util.HashMap;
  3. import android.app.Activity;
  4. import android.app.AlertDialog;
  5. import android.content.ContentValues;
  6. import android.content.DialogInterface;
  7. import android.database.Cursor;
  8. import android.database.SQLException;
  9. import android.database.sqlite.SQLiteDatabase;
  10. import android.os.Bundle;
  11. import android.view.ContextMenu;
  12. import android.view.ContextMenu.ContextMenuInfo;
  13. import android.view.View;
  14. import android.view.View.OnCreateContextMenuListener;
  15. import android.widget.AdapterView;
  16. import android.widget.ListView;
  17. import android.widget.SimpleAdapter;
  18. import android.widget.Toast;
  19. public class ListView_SqliteActivity extends Activity {
  20. SQLiteDatabase mDb;
  21. SQLiteDatabaseDao dao;
  22. // 存储数据的数组列表
  23. ArrayList<HashMap<String, Object>> listData;
  24. // 适配器
  25. SimpleAdapter listItemAdapter;
  26. /** Called when the activity is first created. */
  27. @Override
  28. public void onCreate(Bundle savedInstanceState) {
  29. super.onCreate(savedInstanceState);
  30. setContentView(R.layout.main);
  31. dao = new SQLiteDatabaseDao();
  32. ListView list = (ListView) findViewById(R.id.list_items);
  33. listItemAdapter = new SimpleAdapter(ListView_SqliteActivity.this,
  34. listData,// 数据源
  35. R.layout.item,// ListItem的XML实现
  36. // 动态数组与ImageItem对应的子项
  37. new String[] { "image", "username", "birthday" },
  38. // ImageItem的XML文件里面的一个ImageView,两个TextView ID
  39. new int[] { R.id.image, R.id.username, R.id.birthday });
  40. list.setAdapter(listItemAdapter);
  41. list.setOnCreateContextMenuListener(listviewLongPress);
  42. }
  43. // 简单的数据库操作类
  44. class SQLiteDatabaseDao {
  45. public SQLiteDatabaseDao() {
  46. mDb = openOrCreateDatabase("users.db",
  47. SQLiteDatabase.CREATE_IF_NECESSARY, null);
  48. // 初始化创建表
  49. createTable(mDb, "student");
  50. // 初始化插入数据
  51. insert(mDb, "student");
  52. // 初始化获取所有数据表数据
  53. getAllData("student");
  54. }
  55. // 创建一个数据库
  56. public void createTable(SQLiteDatabase mDb, String table) {
  57. try {
  58. mDb.execSQL("create table if not exists "
  59. + table
  60. + " (id integer primary key autoincrement, "
  61. + "username text not null, birthday text not null,image text);");
  62. } catch (SQLException e) {
  63. Toast.makeText(getApplicationContext(), "数据表创建失败",
  64. Toast.LENGTH_LONG).show();
  65. }
  66. }
  67. // 插入数据
  68. public void insert(SQLiteDatabase mDb, String table) {
  69. // 初始化插入3条数据
  70. ContentValues values = new ContentValues();
  71. values.put("username", "LiMei");
  72. values.put("birthday", "Birthday:6-18");
  73. values.put("image", R.drawable.o);
  74. mDb.insert(table, null, values);
  75. values.put("username", "LinQiao");
  76. values.put("birthday", "Birthday:8-22");
  77. values.put("image", R.drawable.t);
  78. mDb.insert(table, null, values);
  79. values.put("username", "WiLee");
  80. values.put("birthday", "Birthday:9-12");
  81. values.put("image", R.drawable.f);
  82. mDb.insert(table, null, values);
  83. }
  84. // 查询所有数据
  85. public void getAllData(String table) {
  86. Cursor c = mDb.rawQuery("select * from " + table, null);
  87. int columnsSize = c.getColumnCount();
  88. listData = new ArrayList<HashMap<String, Object>>();
  89. // 获取表的内容
  90. while (c.moveToNext()) {
  91. HashMap<String, Object> map = new HashMap<String, Object>();
  92. for (int i = 0; i < columnsSize; i++) {
  93. map.put("id", c.getString(0));
  94. map.put("username", c.getString(1));
  95. map.put("birthday", c.getString(2));
  96. map.put("image", c.getString(3));
  97. }
  98. listData.add(map);
  99. }
  100. }
  101. // 删除一条数据
  102. public boolean delete(SQLiteDatabase mDb, String table, int id) {
  103. String whereClause = "id=?";
  104. String[] whereArgs = new String[] { String.valueOf(id) };
  105. try {
  106. mDb.delete(table, whereClause, whereArgs);
  107. } catch (SQLException e) {
  108. Toast.makeText(getApplicationContext(), "删除数据库失败",
  109. Toast.LENGTH_LONG).show();
  110. return false;
  111. }
  112. return true;
  113. }
  114. }
  115. // 长按事件响应
  116. OnCreateContextMenuListener listviewLongPress = new OnCreateContextMenuListener() {
  117. @Override
  118. public void onCreateContextMenu(ContextMenu menu, View v,
  119. ContextMenuInfo menuInfo) {
  120. // TODO Auto-generated method stub
  121. final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
  122. new AlertDialog.Builder(ListView_SqliteActivity.this)
  123. /* 弹出窗口的最上头文字 */
  124. .setTitle("删除当前数据")
  125. /* 设置弹出窗口的图式 */
  126. .setIcon(android.R.drawable.ic_dialog_info)
  127. /* 设置弹出窗口的信息 */
  128. .setMessage("确定删除当前记录")
  129. .setPositiveButton("是",
  130. new DialogInterface.OnClickListener() {
  131. public void onClick(
  132. DialogInterface dialoginterface, int i) {
  133. // 获取位置索引
  134. int mListPos = info.position;
  135. // 获取对应HashMap数据内容
  136. HashMap<String, Object> map = listData
  137. .get(mListPos);
  138. // 获取id
  139. int id = Integer.valueOf((map.get("id")
  140. .toString()));
  141. // 获取数组具体值后,可以对数据进行相关的操作,例如更新数据
  142. if (dao.delete(mDb, "student", id)) {
  143. // 移除listData的数据
  144. listData.remove(mListPos);
  145. listItemAdapter.notifyDataSetChanged();
  146. }
  147. }
  148. })
  149. .setNegativeButton("否",
  150. new DialogInterface.OnClickListener() {
  151. public void onClick(
  152. DialogInterface dialoginterface, int i) {
  153. // 什么也没做
  154. }
  155. }).show();
  156. }
  157. };
  158. @Override
  159. public void finish() {
  160. // TODO Auto-generated method stub
  161. super.finish();
  162. mDb.close();
  163. }
  164. }

2.xml文件

main.xml

[html] view
plain
copy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <ListView
  7. android:id="@+id/list_items"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:divider="#ffffff"
  11. android:dividerHeight="1dip" />
  12. </RelativeLayout>

item.xml

[html] view
plain
copy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/RelativeLayout"
  4. android:layout_width="fill_parent"
  5. android:layout_height="wrap_content"
  6. android:paddingBottom="4dip"
  7. android:paddingLeft="12dip"
  8. android:paddingRight="12dip" >
  9. <ImageView
  10. android:id="@+id/image"
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:layout_alignParentRight="true"
  14. android:paddingLeft="6dip"
  15. android:paddingTop="6dip" />
  16. <TextView
  17. android:id="@+id/username"
  18. android:layout_width="fill_parent"
  19. android:layout_height="wrap_content"
  20. android:paddingTop="6dip"
  21. android:textColor="#ccc"
  22. android:textSize="18dip" />
  23. <TextView
  24. android:id="@+id/birthday"
  25. android:layout_width="fill_parent"
  26. android:layout_height="wrap_content"
  27. android:layout_below="@+id/username"
  28. android:maxLines="2"
  29. android:paddingRight="20dip"
  30. android:textColor="#fff" />
  31. </RelativeLayout>

android实例 listview与sqlite数据绑定的更多相关文章

  1. 42.Android之ListView中ArrayAdapter简单学习

    今天学习下Android中ListView关于ArrayAdapter数据绑定, 废话少说直接上代码. 改下布局文件: <?xml version="1.0" encodin ...

  2. [android] 手机卫士黑名单功能(ListView结合SQLite增删改)

    修改界面,在顶部横条上增加一个添加按钮,点击打开一个自定义对话框,输入电话号码和拦截模式保存到数据库 自定义对话框看这篇http://www.cnblogs.com/taoshihan/p/53703 ...

  3. Android之ListView性能优化——一行代码绑定数据——万能适配器

    如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有 ...

  4. android——自定义listView

    都知道微信主机面 有个界面会一行一一行的聊天记录,那个效果就可以用listview来实现(当然这只是其中的一种) listView是一种比较常见的组件它用来展示列的view,它是根据数据的长度来显示数 ...

  5. 45个android实例源码

    分享45个android实例源码,很好很强大http://www.apkbus.com/android-20978-1-1.html andriod闹钟源代码http://www.apkbus.com ...

  6. 分享45个android实例源码,很好很强大

    分享45个android实例源码,很好很强大 http://www.apkbus.com/android-20978-1-1.html 分享45个android实例源码,很好很强大http://www ...

  7. android学习笔记48——SQLite

    SQLite SQLite试试一个嵌入式的数据库引擎,专门用于资源有限的设备(如手机.PDA)上适量数据存取. SQLite支持绝大部分SQL92语法,同样允许开发者使用SQL语句操作数据库中的数据, ...

  8. Android的ListView

    ListView ListView 是一个控件,一个在垂直滚动的列表中显示条目的一个控件,这些条目的内容来自于一个ListAdapter. 一个简单的例子 布局文件里新增ListView <Li ...

  9. 【Android 应用开发】Android 数据存储 之 SQLite数据库详解

    . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19028665 . SQLiteDataBase示例程序下 ...

随机推荐

  1. Theia——云端和桌面版的IDE

    Theia是一个利用最新的web技术开发的支持云端和桌面运行的类似IDE的产品,它是一个可扩展的平台,并且全面支持多语言. 目标 建立一个可搭建类似IDE产品的平台 为终端用户提供完整的多语言IDE( ...

  2. Java集合使用之next方法与remove方法 | Java集合使用之remove方法使用易错

    Iterator接口的remove方法将会删除上次调用next方法时返回的元素. next方法和remove方法的调用具有相互依赖性,如果调用remove方法前没有调用next方法是不合法的. 错误使 ...

  3. 机器学习之路--Pandas

    Pandas 是对numpy的封装 Pandas 核心结构DataFrame 近似看出矩阵结构panda字符型叫object dataframe其中一行或者一列叫series dataframe 里面 ...

  4. 配置本地目录作为yum端

    ---恢复内容开始--- 最近在配置gnome-session中发现需要太多依赖的包,又由于实验室使用的是局域网,没有办法连接网络,所以想着配置本地yum安装.在网上找了一些资料,经过整理,把自己这次 ...

  5. docker+mysql 构建数据库的主从复制

    docker+mysql 构建数据库的主从复制 在最近的项目中,决定将项目改造成数据库读写分离的架构,后续会有博文详细讲述我的开发改造,本文主要记录我是如何一步步的构建数据库的主从复制. 为什么使用d ...

  6. word 发表博客

    发表博客大家可采用熟悉的word 编辑排版,然后发布博客.(这里我使用的是word 2013,其他版本大家可以自己测试) 使用word发布博客时,需要先配置一下: 1)单击文件---〉共享---〉发布 ...

  7. sqlserver 存储过程调Api接口

    --开启Sql Server 通讯配置-- sp_configure ; GO RECONFIGURE; GO sp_configure ; GO RECONFIGURE; GO EXEC sp_co ...

  8. 【Spark 内核】 Spark 内核解析-下

    Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制.Spark任务调度机制.Spark内存管理机制.Spark核心功能的运行原理等,熟练掌握Spark内核原理,能够帮助我们更 ...

  9. ATOM插件及快捷键

    xml-formatter :https://atom.io/packages/xml-formatter xml格式化工具 SHIFT-CTRL-X:快速格式化 SHIFT-CTRL-M:移除换行符 ...

  10. phpstudy nginx设置CORS跨域不起作用的可能解决方法

    今天搞了半天的跨域问题,想通过nginx配置跨域,希望以后本地调试程序都不用为这件事烦心.无非就是设置几个请求头: add_header Access-Control-Allow-Origin *; ...