您的位置:首页 > 移动开发 > Android开发

android实例 listview与sqlite数据绑定

2015-05-03 22:32 344 查看
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
plaincopy

package codyy.liuyong;  

[java] view
plaincopy

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. */  

    @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.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() {  

        @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<String, Object> map = listData  

                                            .get(mListPos);  

                                    // 获取id  

                                    int 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();  

        }  

    };  

  

    @Override  

    public void finish() {  

        // TODO Auto-generated method stub  

        super.finish();  

        mDb.close();  

    }  

}  

2.xml文件

main.xml

[html] view
plaincopy

<?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

[html] view
plaincopy

<?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>  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: