android实例 listview与sqlite数据绑定

来源:互联网 发布:座机来电显示软件 编辑:程序博客网 时间:2024/06/06 01:09

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

package codyy.liuyong;
import java.util.ArrayList;import java.util.HashMap;import android.app.Activity;import android.app.AlertDialog;import android.content.ContentValues;import android.content.DialogInterface;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.view.ContextMenu;import android.view.ContextMenu.ContextMenuInfo;import android.view.View;import android.view.View.OnCreateContextMenuListener;import android.widget.AdapterView;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.Toast;public class ListView_SqliteActivity extends Activity {SQLiteDatabase mDb;SQLiteDatabaseDao dao;// 存储数据的数组列表ArrayList<HashMap<String, Object>> listData;// 适配器SimpleAdapter listItemAdapter;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);dao = new SQLiteDatabaseDao();ListView list = (ListView) findViewById(R.id.list_items);listItemAdapter = new SimpleAdapter(ListView_SqliteActivity.this,listData,// 数据源R.layout.item,// ListItem的XML实现// 动态数组与ImageItem对应的子项new String[] { "image", "username", "birthday" },// ImageItem的XML文件里面的一个ImageView,两个TextView IDnew int[] { R.id.image, R.id.username, R.id.birthday });list.setAdapter(listItemAdapter);list.setOnCreateContextMenuListener(listviewLongPress);}// 简单的数据库操作类class SQLiteDatabaseDao {public SQLiteDatabaseDao() {mDb = openOrCreateDatabase("users.db",SQLiteDatabase.CREATE_IF_NECESSARY, null);// 初始化创建表createTable(mDb, "student");// 初始化插入数据insert(mDb, "student");// 初始化获取所有数据表数据getAllData("student");}// 创建一个数据库public void createTable(SQLiteDatabase mDb, String table) {try {mDb.execSQL("create table if not exists "+ table+ " (id integer primary key autoincrement, "+ "username text not null, birthday text not null,image text);");} catch (SQLException e) {Toast.makeText(getApplicationContext(), "数据表创建失败",Toast.LENGTH_LONG).show();}}// 插入数据public void insert(SQLiteDatabase mDb, String table) {// 初始化插入3条数据ContentValues values = new ContentValues();values.put("username", "LiMei");values.put("birthday", "Birthday:6-18");values.put("image", R.drawable.o);mDb.insert(table, null, values);values.put("username", "LinQiao");values.put("birthday", "Birthday:8-22");values.put("image", R.drawable.t);mDb.insert(table, null, values);values.put("username", "WiLee");values.put("birthday", "Birthday:9-12");values.put("image", R.drawable.f);mDb.insert(table, null, values);}// 查询所有数据public void getAllData(String table) {Cursor c = mDb.rawQuery("select * from " + table, null);int columnsSize = c.getColumnCount();listData = new ArrayList<HashMap<String, Object>>();// 获取表的内容while (c.moveToNext()) {HashMap<String, Object> map = new HashMap<String, Object>();for (int i = 0; i < columnsSize; i++) {map.put("id", c.getString(0));map.put("username", c.getString(1));map.put("birthday", c.getString(2));map.put("image", c.getString(3));}listData.add(map);}}// 删除一条数据public boolean delete(SQLiteDatabase mDb, String table, int id) {String whereClause = "id=?";String[] whereArgs = new String[] { String.valueOf(id) };try {mDb.delete(table, whereClause, whereArgs);} catch (SQLException e) {Toast.makeText(getApplicationContext(), "删除数据库失败",Toast.LENGTH_LONG).show();return false;}return true;}}// 长按事件响应OnCreateContextMenuListener listviewLongPress = new OnCreateContextMenuListener() {@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {// TODO Auto-generated method stubfinal AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;new AlertDialog.Builder(ListView_SqliteActivity.this)/* 弹出窗口的最上头文字 */.setTitle("删除当前数据")/* 设置弹出窗口的图式 */.setIcon(android.R.drawable.ic_dialog_info)/* 设置弹出窗口的信息 */.setMessage("确定删除当前记录").setPositiveButton("是",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialoginterface, int i) {// 获取位置索引int mListPos = info.position;// 获取对应HashMap数据内容HashMap<String, Object> map = listData.get(mListPos);// 获取idint id = Integer.valueOf((map.get("id").toString()));// 获取数组具体值后,可以对数据进行相关的操作,例如更新数据if (dao.delete(mDb, "student", id)) {// 移除listData的数据listData.remove(mListPos);listItemAdapter.notifyDataSetChanged();}}}).setNegativeButton("否",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialoginterface, int i) {// 什么也没做}}).show();}};@Overridepublic void finish() {// TODO Auto-generated method stubsuper.finish();mDb.close();}}

2.xml文件

main.xml

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

item.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/RelativeLayout"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:paddingBottom="4dip"    android:paddingLeft="12dip"    android:paddingRight="12dip" >    <ImageView        android:id="@+id/image"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:paddingLeft="6dip"        android:paddingTop="6dip" />    <TextView        android:id="@+id/username"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:paddingTop="6dip"        android:textColor="#ccc"        android:textSize="18dip" />    <TextView        android:id="@+id/birthday"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_below="@+id/username"        android:maxLines="2"        android:paddingRight="20dip"        android:textColor="#fff" /></RelativeLayout>



原创粉丝点击