本文要做的事情就是在前面做的簡單的ToDoList程序上增加一個配置項頁面(Reference)。這個Reference頁面也非常簡單:
這個ToDoList現在有兩個頁面,主頁面能填寫待辦事項,然後manu鍵彈出可以跳轉到Reference頁面,在Reference頁面只有一個checkbox,來給用戶確認是否要本地保存(具體的本地存儲的功能沒有具體實現),Reference頁面還有兩個按鈕,保存和返回。點擊保存按鈕,程序會存儲用戶是否已經選定了本地保存,點擊返回按鈕,頁面會跳轉到ToDoList頁面。
在這個程序中主要是有幾個地方需要處理
這是兩個頁面,所以我們首先會想到需要兩個layout文件,於是我們創建了一個res/layout/preferences.xml,在這個layout中定義好了一個checkbox和兩個按鈕。現在的問題是當我點擊main.xml中的manu按鈕的時候,它是會觸發onOptionsItemSelected事件的,所以我們需要在這個事件中觸發reference頁面。這個如何做呢?
大致是有兩種方法:
1 在ToDoListActivity中調用setContentView來觸發preferences.xml的展現。
2 重新創建一個Activity類Reference,ToDoListActivity中使用Intent觸發Reference的啟動,繪制等功能。
這兩種方法有什麼不同呢?
第一種方法相當於html中使用js來讓不同的div的意思。它的好處就是簡單,對於簡單的邏輯和頁面完全可以這麼做。它的缺點也顯而易見,等於是一個Activity控制多個layout,那麼在代碼層面,會是所有的邏輯都存放在一個類中,對於代碼的易用性和維護性都是很大的損失。對於我們這個應用,我們選擇第二種方法。
所以我們的onOptionsItemSelected事件代碼如下:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.manu_reference:
Intent intent = new Intent();
intent.setClass( this, Reference. class);
startActivity(intent);
}
return true;
}
當我在manu中觸發的item是manu_reference(這個已經在配置中設置了id),那麼我就啟動我需要的Activity。