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长按响应事件,需要实现OnCreateContextMenuListe
OnCreateContextMenuListe
-
new
OnCreateContextMenuListe ner(){ -
@Override
-
public
void onCreateContextMenu(ContextMenu menu, View v, -
ContextMenuInfo
menuInfo) { -
//
TODO Auto-generated method stub -
final
AdapterView.AdapterContextMenuInfo info = -
(AdapterView.AdapterContextMenuInfo)
menuInfo; -
//mListPos为listview选项的位置
-
int
mListPos = info.position; -
}
1.类文件
ListView_SqliteActivity.java
-
package
com.ls.main; -
-
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.OnCreateContextMenuListe ner; -
import
android.widget.AdapterView; -
import
android.widget.ListView; -
import
android.widget.SimpleAdapter; -
import
android.widget.Toast; -
-
public class ListView_SqliteActivity extendsActivity { -
-
SQLiteDatabase mDb; -
SQLiteDatabaseDao dao; -
// 存储数据的数组列表 -
ArrayList> listData; -
// 适配器 -
SimpleAdapter listItemAdapter; -
-
-
@Override -
public 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 ID -
new int[] { R.id.image, R.id.username, R.id.birthday }); -
list.setAdapter(listItemAdapter); -
list.setOnCreateContextMenuLi stener(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 " + null);table, -
int columnsSize = c.getColumnCount(); -
listData = new ArrayList>(); -
// 获取表的内容 -
while (c.moveToNext()) { -
HashMap map = new HashMap(); -
for ( inti 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 intmDb, String table, 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; -
} -
} -
//长按事件响应 -
OnCreateContextMenuListe ner listviewLongPress = new OnCreateContextMenuListe ner(){ -
@Override -
public void onCreateContextMenu(ContextMenu menu, View v, -
ContextMenuInfo menuInfo) { -
// TODO Auto-generated method stub -
final 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 map = listData -
.get(mListPos); -
// 获取id -
int id "id")= Integer.valueOf((map.get( -
.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(); -
} -
}; -
@Override
-
public
void finish() { -
// TODO Auto-generated method stub -
super.finish(); -
mDb.close(); -
} -
}
2.xml文件
main.xml
版权声明:本文为博主原创文章,未经博主允许不得转载。