C#程序員學習Android開發系列之ListView
上篇博客解決了Android客戶端通過WebService與服務器端程序進行交互的問題,這篇博客重點關注兩個問題,一個是Android應用程序如何與本機文件型數據庫SQLite進行交互,另一問題則是如何在ListView中按照我們想要的界面效果進行展示。限於篇幅這篇重點講ListView,下篇博客重點闡述SQLite。
ListView是一個常用的數據顯示控件,假設我們要做一個簡單的界面,如圖所示。
這張圖是我直接從Android平板電腦(Android 4.2.2)上面截圖下來的,就是一個普通的列表,能夠點擊報名按鈕獲取到對應行的信息。
這裡面顯示的數據是我從SQLite數據庫中查詢出來的,封裝的類的代碼如下:
public class MyDatabaseHelper extends SQLiteOpenHelper {
private static final String name = "mydb.db";// SQLite數據庫文件名
private static final int version = 1;// SQLite數據庫版本號
public MyDatabaseHelper(Context context) {
super(context, name, null, version);
}
@SuppressLint("SimpleDateFormat")
@Override
public void onCreate(SQLiteDatabase db) {
try {
// 開啟事務
db.beginTransaction();
String sql = "create table jobInfo (name varchar(20),"
+ "num integer," + "date varchar(10),"
+ "description text)";
db.execSQL(sql);
//測試插入10條數據
for (int i = 0; i < 10; i++) {
db.execSQL(
"insert into jobInfo(name,num,date,description)values(?,?,?,?)",
new Object[] {
"name" + i,
i,
new SimpleDateFormat("yyyy-MM-dd")
.format(new Date()), "description" + i });
}
// 標識事務成功
db.setTransactionSuccessful();
} finally {
// 結束事務
db.endTransaction();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//數據庫升級操作
}
}
在需要創建數據庫、插入數據的地方都可以實例化MyDatabaseHelper這個類,關於更多的SQLite的細節下篇博客將會進行詳細的說明。
activity_main.xml布局文件:
可以看到這是一個相對布局,裡面有一個線性布局,線性布局裡面又放置了4個TextView作為ListView數據的標題。下面直接是一個ListView控件,由於這是相對布局,為了讓ListView顯示在“表頭”下面,我們設置了layout_below屬性。此外要注意ListView的id的寫法。
接著按照界面的要求,我們准備一下ListView加載布局文件的內容,我們起名為:list_item.xml。
list_item.xml:
這也是一個普通的線性布局,設置orientation為horizontal(水平)。
布局文件准備好,下面我們准備寫代碼了。
我們讓MainActivity這個類繼承自ListActivity,完整的代碼如下:
public class MainActivity extends ListActivity {
List
上面的代碼有幾個知識點需要注意:
1、SQLite數據庫的查詢操作
我們通過getReadableDatabase().query方法執行了查詢操作,返回Cursor(游標,與JDBC中的ResultSet類似)對象。
2、ListView控件使用(重點)
我們參考了SimpleAdapter默認的構造函數的方法,創建了自定義的MyButtonAdapter類,在顯示數據的同時,能夠給每一行的按鈕綁定點擊事件。
3、彈出提示框
彈出提示框的代碼很長,完全可以封裝到一個方法中,簡化代碼。這裡完整的列出來,目的就是體驗一下設計思路。經過觀察我們發現,這就是所謂的“鏈式編程”,可以通過連續的".",設置參數(控制顯示效果)。
strings.xml:
確定
取消
最終在pad上面的執行效果如下: