android 方法筆記



(1)super.onCreate(savedInstanceState)是調用父類的onCreate構造函數

savedInstanceState是保存當前Activity的狀態信息

  在實際應用中,當一個Activity結束前,如果需要保存狀態,就在onsaveInsanceState中,將狀態數據以key-value的形式放入到saveInsanceState中。這樣,當一個Activity被創建時,就能從onCreate的參數saveInsanceState中獲得狀態數據。

其中super就是調用父類的屬性或者方法,反之this就是調用本類中的屬性和方法

(2)AppManager 用於管理activity和退出機制

調用如下所示:在自己封裝的Baseactivity裏面進行操作:

  1. @Override

  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. // 添加Activity到堆棧
  5. AppManager.getAppManager().addActivity(this);
  6. }
  7. @Override
  8. protected void onDestroy() {
  9. super.onDestroy();
  10. // 結束Activity&從堆棧中移除
  11. AppManager.getAppManager().finishActivity(this);
  12. }

(3)Activity生命週期

protected void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onResume()
protected void onPause()
protected void onStop()
protected void onRestart()
protected void onDestroy()

簡要說明

onCreate(Bundle savedInstanceState):創建activity時調用。設置在該方法中,還以Bundle中可以提出用於創建該 Activity 所需的信息。
onStart():activity變爲在屏幕上對用戶可見時,即獲得焦點時,會調用。
onResume():activity開始與用戶交互時調用(無論是啓動還是重新啓動一個活動,該方法總是被調用的)。
onPause():activity被暫停或收回cpu和其他資源時調用,該方法用於保存活動狀態的。。
onStop():activity被停止並轉爲不可見階段及後續的生命週期事件時,即失去焦點時調用。
onRestart():重新啓動activity時調用。該活動仍在棧中,而不是啓動新的活動。
onDestroy():activity被完全從系統內存中移除時調用,該方法被調用可能是因爲有人直接調用 finish()方法 或者系統決定停止該活動以釋放資源。

(4)setContentView

setContentView(R.layout.main)在Android裏面,這句話是什麼意思?
R.layout.main是個佈局文件即控件都是如何擺放如何顯示的,setContentView就是設置一個Activity的顯示界面,這句話就是設置這個這句話所再的Activity採用R.layout下的main佈局文件進行佈局
使用setContentView可以在Activity中動態切換顯示的View,這樣,不需要多個Activity就可以顯示不同的界面,因此不再需要在Activity間傳送數據,變量可以直接引用。

(5)Android解決有時按HOME鍵再回來會重啓問題

解決方法:

if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
    finish();
    return;
(6)Android的onCreateOptionsMenu()創建菜單Menu

Android一共有三種形式的菜單:
            1.選項菜單(optinosMenu)
            2.上下文菜單(ContextMenu)
            3.子菜單(subMenu)

其中最常用的就是選項菜單(optionsMenu), 該菜單在點擊 menu 按鍵 後會在對應的Activity底部顯示出來。

1.Activity菜單機制 (與dialog類似)
Activity有一套機制來實現對菜單的管理,方法如下:
   1.public boolean onCreateOptionsMenu(Menu menu)
             此方法用於初始化菜單,其中menu參數就是即將要顯示的Menu實例。
              返回true則顯示該menu,false 則不顯示;
              
(只會在第一次初始化菜單時調用)

           2.public boolean 
onPrepareOptionsMenu(Menu menu)
             在
onCreateOptionsMenu執行後,菜單被顯示前調用;如果菜單已經被創建,則在菜單顯示前被調用。
              同樣的, 返回true則顯示該menu,false 則不顯示;
             
(可以通過此方法動態的改變菜單的狀態,比如加載不同的菜單等)

           3.public void onOptionsMenuClosed(Menu menu)
              每次菜單被關閉時調用.
              
菜單被關閉有三種情形,menu按鈕被再次點擊、back按鈕被點擊或者用戶選擇了某一個菜單項)
              
            4.public boolean onOptionsItemSelected(MenuItem item)
               菜單項被點擊時調用,也就是菜單項的監聽方法。
              
          通過這幾個方法,可以得知,對於Activity,同一時間只能顯示和監聽一個Menu 對象。


  2. 添加菜單:

      可以在onCreateOptionsMenu或者onPrepareOptionsMenu方法中來添加菜單

      2.1代碼添加:
        menu.add((int groupId, int itemId, int order, charsequence title) .setIcon(drawable ID)

       add()方法的四個參數,依次是: 

      1、組別,如果不分組的話就寫Menu.NONE, 

      2、Id,這個很重要,Android根據這個Id來確定不同的菜單 

      3、順序,哪個菜單項在前面由這個參數的大小決定 

      4、文本,菜單項的顯示文本

       add()方法返回的是MenuItem對象,調用其setIcon()方法,爲相應MenuItem設置Icon

     示例:
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.add(Menu.NONE, Menu.First+1, 0, "設置").setIcon(R.drawable.setting);
        return true;
    }
      
      2.2佈局文件添加:
         
       getMenuInflater().inflate(R.menu.options_menu, menu);

      調用Activity的getMenuInflater()得到一個MenuInflater, 
       使用inflate方法來把佈局文件中的定義的菜單 加載給 第二個參數所對應的menu對象

       示例:
     @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate(R.menu.options_menu, menu);
        return true;
    }

    佈局文件:
      在res目錄下建立一個menu文件夾,並創建佈局文件: options_menu.xml 
    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_setting" android:title="設置" android:icon="@drawable/setting"></item>
    </menu>


   3.菜單項監聽:
    只要菜單中的菜單項被點擊,都會觸發onOptionsItemSelected(MenuItem item)
    item參數即爲被點擊的菜單項,那麼需要在此方法內判斷哪個Item被點擊了,從而實現不同的操作。
    對於兩種不同的添加菜單方法,判斷的方法有一點區別,但本質是一樣的。

    3.1代碼添加菜單的判斷方法
     @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        switch(item.getItemId())//得到被點擊的item的itemId
        {
        case Menu.First+1: //對應的ID就是在add方法中所設定的Id
            break;
        case Menu.First+2:
            break;
        }
        return true;
    }

  3.2佈局文件添加菜單的判斷方法:
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        switch(item.getItemId())//得到被點擊的item的itemId
        {
        case R.id.menu_setting://這裏的Id就是佈局文件中定義的Id,在用R.id.XXX的方法獲取出來
            break;
        case R.id.menu_info:
            break;
        }
        return true;
    }
(7)android menu的onOptionsItemSelected怎麼和menu關聯起來?

看你是那種方式創建的menu,如果是xml形式的話。在onOptionsItemSelected裏面 switch{ case(R.id.XXX)}就可以對應你的各個menu的點擊事件。如果是代碼創建,那就是你創建時的id。
例如 menu.add(0, 1, 1, "XXX"); 這是 一樣在onOptionsItemSelected裏面switch{
case 1: //TODO(這是就是這個菜單項的點擊事件了。) }

Activity的父類裏面已經封裝好了menu方法。你只需要重寫父類的onCreateOptionMenu()方法和onOptionsItemSelected()即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章