Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 中級開發 >> Android入門開發指南之Notepad 練習(下)

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中,添加創建,編輯和刪除文本的功能。
返回指南主頁進入下一個練習。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved