其實要實作android menu很簡單,
這裡會快速的帶過,
主要會講一下
onCreateOptionsMenu和
onPrepareOptionsMenu的差別
首先先在/res/資料夾底下,開立一個資料夾/menu
然後再/res/menu/資料夾底下,建立一個menu_option.xml的檔案
檔案內容如下
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menuOption1" android:title="option1"></item>
<item android:id="@+id/menuOption2" android:title="option2"></item>
</menu>
建立完成以後,
就在activity中加入menu的code如下:
public class main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
//當menu option被點選以後的反應
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
Toast.makeText(this, String.valueOf(item.getItemId()), Toast.LENGTH_LONG).show();
return super.onMenuItemSelected(featureId, item);
}
//建立option menu,等等會講解和onPrepareOptionsMenu的差別
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_option, menu);
return super.onCreateOptionsMenu(menu);
}
//一樣是建立option menu,等等會講解和onCreateOptionsMenu的差別
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_option, menu);
return super.onPrepareOptionsMenu(menu);
}
}
這樣MENU就會建立完成,
但是
onCreateOptionsMenu和
onPrepareOptionsMenu的差別在哪呢?
onCreateOptionsMenu 只會呼叫一次,他只會在MENU顯示之前,去做一次!!!之後就不會再去呼叫!onPrepareOptionsMenu onPrepareOptionsMenu是每次在display menu之前,都會去呼叫, 只要按一次menu按鍵,就會呼叫一次。 所以你會發現每次只要按一次menu按鍵, menu選單就會多兩個(因為我們預設是兩個) 你可以利用onPrepareOptionsMenu來做update menu狀態的動作
如果你要把menu現有的option清空,
就是下面那行CODE
menu.clear();
如果想要做到儲存資訊,
且又是少量的,
如果用到sqllite又會太過於麻煩(且也會較慢)
這裡就可以用到SharedPreferences,
假設我們要做個登入介面
有個Email的欄位,
且使用者可以勾選是否要記憶住帳號及密碼,
我們就可以用SharedPreferences來做
首先我們先來做
儲存資訊的function
如下:
/*
* 用來把mail存在preference裡面
*/
private final void fnStorePrefs(){
//先取得preference,且名稱為STR_PREF 的prefernce,STR_PREF 請自行宣告
final SharedPreferences settings = getSharedPreferences(STR_PREF , 0);
//然後再取得editor,為了儲存資訊
final Editor editor = settings.edit();
//把資料存進去
editor.putString(STR_PREF_EMAIL , edEmail.getText().toString());
//然後一定要commit,才會存進去
editor.commit();
}
然後再做
取得資訊的function
/*
* 用來把mail從preference抓回來
*/
private final void fnRestorePrefs(){
//先取得preference,且名稱為STR_PREF 的prefernce,STR_PREF 請自行宣告
final SharedPreferences settings = getSharedPreferences(STR_PREF , 0);
//然後直接取得資料
final String strEmail = settings.getString(STR_PREF_EMAIL ,"");
//然後再放進去EditText裡面去
edEmail.setText(strEmail);
}
基本上就這二種基本的運用,一個儲存的function、一個取得的function
就看什麼時候要
存,什麼時候要
取