Android入門開發指南之Notepad 練習(下)
編輯:中級開發
第9步
在onCreate()方法中添加代碼。
這裡我們將設置activity的標題(顯示在屏幕頂端),使用notepad_list布局,我們為activity創建顯示內容,建立DBHelper實例用來訪問數據,然後將可顯示的文本標題和列表關聯起來。
a. 調用super()帶icicle參數,傳入到我們的方法中。
b. 在R.layout.notepad_list中調用setContentVIEw。
c. 為類DBHelper創建一個新的名為dbHelper的私有類成員(放在onCreate方法之前)。
d. 在onCreate方法後面,構造一個DBHelper實例,並分配dbHelper成員(注意:你必須傳遞this引用到DBHelper的構造函數中)。
e. 最後,調用一個新的方法fillData()-獲取數據平且使用helper進行關聯,我們在這裡還沒有定義它。
f. onCreate()現在看起來應該像這個樣子:
g. @Override
h. public void onCreate(Bundle icicle)
i. {
j. super.onCreate(icicle);
k. setContentVIEw(R.layout.notepad_list);
l. dbHelper = new DBHelper(this);
m. fillData();
n. }
同時記住添加DBHelper成員定義(在NoteNumber定義中)。
private DBHelper dbHelper;
第10步
更多菜單內容
我們構建的Notepad應用僅僅觸及到菜單的表面。你還可以為你的菜單添加菜單項,創建子菜單甚至是添加菜單項到其它應用中。
在onCreateOptionsMenu()函數體中填入代碼。
我們將只添加一個菜單項,”Add Item”,使用我們在string.XML中創建,使用一個常量定義的字符創。我們將創建在類的頂部,用來標識添加菜單項的操作。
a. 在strings.XML資源中(在res/valuse目錄下),為menu_insert添加一個新的字符串,文本為”Add Item”,<string name="menu_insert">Add Item</string>,然後保存這個文件。
b. 同樣,你需要一個菜單位置長廊,在Notepadv1類的頂部(剛好在KEY_BODY定義下面)
public static final int INSERT_ID = Menu.FIRST;
c. 在方法onCreateOptionsMenu()中,添加菜單項。同樣注意super調用返回的結果,整個完成之後的方法看上去應該像這個樣子:
d. @Override
e. public boolean onCreateOptionsMenu(Menu menu) {
f. boolean result = super.onCreateOptionsMenu(menu);
g. menu.add(0, INSERT_ID, R.string.menu_insert);
h. return result;
i. }
第11步
在onOptionsItemSelected()方法中添加代碼:
這個方法用來處理我們新的”Add Note”菜單項的選擇動作。當這個選中的方法調用item.getID()獲得的值為INSERT_ID(我們用來標識菜單項)時,我們可以檢測到用戶選擇菜單動作,並且執行適當的處理。
a. super.onOptionsItemSelected(item)方法在這個函數結尾運行-我們希望能夠首先捕獲我們的事件。
b. 返回值上的Switch語句
c. case INSERT_ID:
d. 調用方法createNote()
e. 在case語句結束處添加break;
f. 在函數末尾返回superclass onOptionsItemSelected()的返回值。
g. 現在整個onOptionsItemSelect()函數看起來像這個樣子:
h. @Override
i. public boolean onOptionsItemSelected(Item item) {
j. switch (item.getId()) {
k. case INSERT_ID:
l. createNote();
m. break;
n. }
o.
p. return super.onOptionsItemSelected(item);
q. }
第12步
添加一個新的createNote()方法 :
在應用程序的第一版中,createNote()不是非常有用.我們將簡單創建一個帶標題的文本,標題基於一個計數器(“Note1”,”Note2”),文本正文為空。現在我們還沒有辦法編輯文本內容,所以現在我們將創建一個帶默認值的文本。
a. 字符串 noteName = “Note” + noteNumber++; (使用”Note”和我們在類裡面定義得計數器構造名字);
b. 使用noteName作為標題,空字符””作為正文調用函數dbHelper.createRow()
c. Call fillData() method again after adding (inefficIEnt but simple)
d. The whole createNote() method should look like this:
e. private void createNote() {
f. String noteName = "Note " + noteNumber++;
g. dbHelper.createRow(noteName, "");
h. fillData();
i. }
第13步
列表適配器
我們例子使用了一個簡單的數組適配器,它將一個數組或者列表元素綁定到一個ListVIEw,在android中更通用的做法是,列表適配器和ContentPorvider一起工作,這也是一個使用列表的非常簡單的方法。
綁定一個ContentProvider到一個ListVIEw,你可以使用一個android.widget.SimpleCuresorAdapter來綁定contertProvider中提供的數據到ListVIEw。
定義fillData方法,這個過程相對長一點:
這個方法使用ArrayAdapter,它是最簡單的將數據導入ListVIEw中的方法。ArrayAdapter不僅獲取一個列表或者字符串數組,還把它們綁定到一個文本視圖中,這個視圖在布局中定義為列表行(這個就是我們的notes_row.XML布局中的text1域)。這個方法簡單的從helper數據庫中獲取一列文本,使用每一行的文本標題構造一個字符串列表,然後在這些列表項之上創建一個ArrayAdapter,然後綁定我們定義的notes_row.( The method simply obtains a list of notes from the database helper, constructs a List of Strings using the title strings from each row, and then creates an ArrayAdapter out of those items and bound to use the notes_row we defined.沒有完全理解)。
private void fillData() {
// We need a list of strings for the list items
List<String> items = new ArrayList<String>();
// Get all of the rows from the database and create the item list
List<Row> rows = dbHelper.fetchAllRows();
for (Row row : rows) {
items.add(row.title);
}
// Now create an array adapter and set it to display using our row
ArrayAdapter<String> notes =
new ArrayAdapter<String>(this, R.layout.notes_row, items);
setListAdapter(notes);
}
a. ArrayAdapter需要一個字符串列表(List<String>),包含要顯示的項。
b. 數據從數據庫中一行行讀出,每一行的標題域構成列表字符串。
c. 我們指定我們創建的notes_row視圖作為數據容器。
d. 如果你發現沒有報告過的類錯誤,你可以按組合鍵ctrl-shift-O(在Mac 上是cmd-shift-O)生成錯誤報告。
注意:在這個聯系中,我們使用了一個ArrayAdapter,這並不是一個通用的做法,更典型的做法是,使用一個SimpleCursorAdapter和ContentProvider,或者至少從一次查詢中返回一個Cursor,查看List Adapters上的工具條獲取更多的信息。
第14步
運行程序!
a. 在工程Notepadv1上右擊
b. 從彈出菜單中選擇 Run As -> android Application
c. 如果你看到一個對話框彈出來,選擇android啟動器作為運行應用程序的方法(你也可以使用對話框頂部的鏈接作為你的工作區的默認值,這是推薦使用的,因為它可以組織插件每次運行時等詢問)。
d. 點擊菜單按鈕,從菜單中選擇”Add item”添加新的文本。
解決方案以及下一步
你可以拿你自己的實現方法與zip文件中Notepadv1Solution的類實現辦法作比較,一旦你完全掌握,讓我們進入指南練習2中,添加創建,編輯和刪除文本的功能。
返回指南主頁進入下一個練習。
- 上一頁:Android入門開發指南之Notepad 練習(上)
- 下一頁:Android之轉化屏幕•ViewFlipper 的使用(1)