2011年12月5日 星期一

ListView&DateSpicker連接SQLite使用

XML
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/absolute"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>

<DatePicker
    android:id="@+id/dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="11dp"
    android:layout_y="20dp" />

<Button
    android:id="@+id/insert"
    android:layout_width="77px"
    android:layout_height="wrap_content"
    android:layout_x="26dp"
    android:layout_y="300dp"
    android:text="新增" />
<EditText
    android:id="@+id/note"
    android:layout_width="262px"
    android:layout_height="129px"
    android:layout_x="12dp"
    android:layout_y="158dp"
    android:textSize="18sp" >
</EditText>
<Button
    android:id="@+id/delete"
    android:layout_width="77px"
    android:layout_height="wrap_content"
    android:layout_x="120dp"
    android:layout_y="300dp"
    android:text="刪除" />
<ListView
    android:id="@+id/lv"
    android:layout_width="283dp"
    android:layout_height="136dp"
    android:layout_x="20dp"
    android:layout_y="332dp"
    android:scrollbars="horizontal|vertical" >
</ListView>
</AbsoluteLayout>


package com.demo.android.Note;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class NoteActivity extends Activity {
static String TABLE_NAME="Notes";
     static String ID="_id"; //使用SimpleCursorAdapter欄位名稱必須為_id
     static String DATE="date";
     static String NOTE="note";
     static String[] COLUMNS = { ID, DATE, NOTE };
     //android內建list樣式 
     //android.R.layout.simple_list_item_2
     //android.R.id.hint
     //android.R.id.text1
     //android.R.id.text2
     static int[] TO = { android.R.id.hint, android.R.id.text1, android.R.id.text2};
     long selectedIndex = 0;//儲存點選ListView項目
     
          
     DBConnection dbconn;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
                   
        OnClickListener OnInsertClick=null;
        OnClickListener OnDeleteClick=null;
        //建立資料庫實體
        dbconn=new DBConnection(this);
        
        //ListView顯示Notes表格內容
        show();
        
                
        //建立onInsertclick事件
        OnInsertClick=new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//取得DatePicker設定的日期
DatePicker dp = (DatePicker)findViewById(R.id.dp); 
String date = dp.getYear()+"/"+(dp.getMonth()+1)+"/"+dp.getDayOfMonth();
String note = ((EditText)findViewById(R.id.note)).getText().toString();
//新增Note
insert( date, note);
//清除EditText
((EditText)findViewById(R.id.note)).setText("");
}
       
        };
        
        //Insert Button 繫結至onInsertclick事件
        Button insert=(Button)findViewById(R.id.insert);
        insert.setOnClickListener(OnInsertClick);
        
      //建立onDelectclick事件
        OnDeleteClick = new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//刪除所選的資料
delete(selectedIndex);
}
       
        };
        
      //Delete Button 繫結至onDeleteclick事件
        Button delete=(Button)findViewById(R.id.delete);
        delete.setOnClickListener(OnDeleteClick);
        
        ListView lv = (ListView)findViewById(R.id.lv);
        //設定點選ListView的Item事件
        lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View view,
                                           int position, long id) {

//儲存點選編號
selectedIndex = id;
}
        });

        
    }
    
    
    private void show() {
   
   
    SQLiteDatabase db=dbconn.getWritableDatabase();
        Cursor c=null;
        
        //查詢資料 SELECT _id, date, note FROM Notes
        c=db.query(TABLE_NAME, COLUMNS,null, null, null, null, null);     
        
      //使用SimpleCursorAdapter直接將資料表資料顯示至ListView上
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, c, COLUMNS, TO);
    ListView lv = (ListView)findViewById(R.id.lv);
    lv.setAdapter(adapter);
   
    //把建立的Cursor實體交給Activity管理,這樣Cursor對象的生命週期就能和當前的Activity同步
    startManagingCursor(c);
   
    db.close();
    }
    
    private void insert(String date, String note) {
    // 用ContentValues插入資料
    ContentValues values=new ContentValues();
values.put(DATE,date);
values.put(NOTE,note);
SQLiteDatabase db = dbconn.getWritableDatabase();
db.insert(TABLE_NAME, null, values);
db.close();
//ListView顯示Notes表格內容
show();
    }
    
    private void delete(long id) {
    // 刪除代號為id的資
    SQLiteDatabase db = dbconn.getWritableDatabase();
    db.delete(TABLE_NAME, "_id=?" , new String[]{Long.toString(id)});
db.close();
//ListView顯示Notes表格內容
show();
    }
    
}
整個程式流程: 





package com.demo.android.Note;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBConnection extends SQLiteOpenHelper {
 private static final String DATABASE_NAME="FileDB";
    private static final int DATABASE_VERSION=2;
 public DBConnection(Context context) {
  super(context, DATABASE_NAME, null, DATABASE_VERSION);
  // TODO Auto-generated constructor stub
 }
 @Override
 public void onCreate(SQLiteDatabase db) {
  // TODO Auto-generated method stub
  //建立表格
  //空格一定要保留
  String sql = "CREATE TABLE  Notes  (" 
    + " _id INTEGER PRIMARY KEY AUTOINCREMENT, "
    + " date text not null, "
    + " note text not null" + ");";

  db.execSQL(sql);
 }
 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  // TODO Auto-generated method stub

 }
}
  
  


1 則留言: