android listview与sqlite数… 分类: Android数据存储 2014-05-30 10:58 67人阅读 评论(0) 收藏

http://www.yoyong.com/archives/368

本例主要实现的是一个学生数据表(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类获取选项的相应位置,也就是数据源的具体数据,获取选项位置后,可以提取相应选项的内容进而执行相关的操作。

OnCreateContextMenuListener的使用

  1. new OnCreateContextMenuListener(){  
  2. @Override  
  3. public void onCreateContextMenu(ContextMenu menu, View v,  
  4. ContextMenuInfo menuInfo)  
  5. // TODO Auto-generated method stub  
  6. final AdapterView.AdapterContextMenuInfo info  
  7. (AdapterView.AdapterContextMenuInfo) menuInfo;  
  8. //mListPos为listview选项的位置  
  9. int mListPos info.position;  
  10.  

1.类文件

ListView_SqliteActivity.java

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

2.xml文件
main.xml

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2014-05-30 10:58  leansmall  阅读(97)  评论(0编辑  收藏  举报