zoukankan      html  css  js  c++  java
  • listview与sqlite数据绑定

    转自CSDN  richnaly 仅供自己学习记录

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

    [html] view plaincopy
     
    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.   
    7.     <ListView  
    8.         android:id="@+id/list_items"  
    9.         android:layout_width="wrap_content"  
    10.         android:layout_height="wrap_content"  
    11.         android:divider="#ffffff"  
    12.         android:dividerHeight="1dip" />  
    13.   
    14. </RelativeLayout>  


    item.xml

    [html] view plaincopy
     
      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.   
      10.     <ImageView  
      11.         android:id="@+id/image"  
      12.         android:layout_width="wrap_content"  
      13.         android:layout_height="wrap_content"  
      14.         android:layout_alignParentRight="true"  
      15.         android:paddingLeft="6dip"  
      16.         android:paddingTop="6dip" />  
      17.   
      18.     <TextView  
      19.         android:id="@+id/username"  
      20.         android:layout_width="fill_parent"  
      21.         android:layout_height="wrap_content"  
      22.         android:paddingTop="6dip"  
      23.         android:textColor="#ccc"  
      24.         android:textSize="18dip" />  
      25.   
      26.     <TextView  
      27.         android:id="@+id/birthday"  
      28.         android:layout_width="fill_parent"  
      29.         android:layout_height="wrap_content"  
      30.         android:layout_below="@+id/username"  
      31.         android:maxLines="2"  
      32.         android:paddingRight="20dip"  
      33.         android:textColor="#fff" />  
      34.   
      35. </RelativeLayout>  
  • 相关阅读:
    Recommended Books for Algo Trading in 2020
    Market Making is simpler than you think!
    Top Crypto Market Makers of 2020
    Top Crypto Market Makers, Rated and Reviewed
    爬取伯乐在线文章(五)itemloader
    爬取伯乐在线文章(四)将爬取结果保存到MySQL
    爬取伯乐在线文章(三)爬取所有页面的文章
    爬取伯乐在线文章(二)通过xpath提取源文件中需要的内容
    爬取伯乐在线文章(一)
    爬虫去重策略
  • 原文地址:https://www.cnblogs.com/rexienk/p/4955682.html
Copyright © 2011-2022 走看看