Android程序ToDoList增加配置項頁面

 
 
本文要做的事情就是在前面做的簡單的ToDoList程序上增加一個配置項頁面(Reference)。這個Reference頁面也非常簡單:

 

Image Image(1)

這個ToDoList現在有兩個頁面,主頁面能填寫待辦事項,然後manu鍵彈出可以跳轉到Reference頁面,在Reference頁面隻有一個checkbox,來給用戶確認是否要本地保存(具體的本地存儲的功能沒有具體實現),Reference頁面還有兩個按鈕,保存和返回。點擊保存按鈕,程序會存儲用戶是否已經選定瞭本地保存,點擊返回按鈕,頁面會跳轉到ToDoList頁面。

在這個程序中主要是有幾個地方需要處理

1 如何在兩個Activity中進行切換
這是兩個頁面,所以我們首先會想到需要兩個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來讓不同的p的意思。它的好處就是簡單,對於簡單的邏輯和頁面完全可以這麼做。它的缺點也顯而易見,等於是一個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。

2 Intent和Activity
Android應用程序的三種核心的組件:Activity,Service, Brocast Receiver。這三種組件互相或者內部進行交互的消息就叫做Intent。比如在我們這個程序中,就是兩個Activity需要進行交互,這個時候就需要使用到瞭Intent瞭。

Intent有三種用法:

傳遞給Activity:startActivity(Intent), startActivityForResult()

傳遞給Service:startService(Intent), bindService()

傳遞給Broadcast:sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcast()

在這個例子中,除瞭從ToDoListActivity跳到Reference,也有從Reference跳到ToDoListActivity(點擊返回按鈕)。

  Button cancelReference = (Button)findViewById(R.id. cancel);
           cancelReference.setOnClickListener( new View.OnClickListener() {
                 
                 @Override
                 public void onClick(View v) {
                     Intent intent = new Intent();
                 intent.setClass(Reference.this, ToDoListActivity.class);
                startActivity( intent);
                }
           });
3 配置項存儲
關於配置項存儲這裡使用的是SharePreferences。SharePreferences提供瞭一個接口讓你能存儲和獲取持久化的key-value數據。你可以持久化的數據類型有:boolean,float,int,long,string。

簡單來說:

創建對象使用方法:
getSharePreferences()

getPreferences()

寫數據使用方法:
1 使用edit()獲取寫句柄

2 調用putXXXX()方法

3 調用commit

讀數據使用方法:
getXXX()

在這個例子中有這樣用到:

  final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
            boolean isSaveLocal = prefs.getBoolean( IS_SAVE_LOCAL, false);
 

 
Editor editor = prefs.edit();
                     editor.putBoolean( IS_SAVE_LOCAL, isChecked);
                     editor.commit();

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *