Android開發學習 之 四、Activity

來源:互聯網
上載者:User

Android開發學習 之 四、Activity
四、Activity4.1 Activity

Activity是應用程式的入口。負責建立才視窗(setContextView(View)),和使用者互動等。

4.1.1 基本用法

首先定義一個類繼承自android.app.Activity,在AndroidManifest.xml檔案的application標籤裡聲明一個activity即可。

一般一個程式可能會有多個Activity,需要指定程式運行時首先載入的Activity,在activity標籤內部需要定義action 和category 。首先運行這個Activity。

一個Activity例子。設定ContentView,擷取視圖上的按鈕,添加事件。

Java代碼
    public class ActivityMainExample extends Activity implements View.OnClickListener { private Button button1; private Button button2; private Button button3; @Override public void onCreate(Bundle savedInstanceState) { Log.v(CommonConfig.LOG_TAG, "ActivityExample onCreate"); super.onCreate(savedInstanceState); super.requestWindowFeature(Window.FEATURE_NO_TITLE); super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); super.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); super.setContentView(R.layout.main); this.button1 = (Button) super.findViewById(R.id.button1); this.button2 = (Button) super.findViewById(R.id.button2); this.button3 = (Button) super.findViewById(R.id.button3); this.button1.setOnClickListener(this); this.button2.setOnClickListener(this); this.button3.setOnClickListener(this); } @Override public void onClick(View v) { if (v.equals(this.button1)) { } else if (v.equals(this.button2)) { } else if (v.equals(this.button3)) { } } }

    AndroidManifest配置。

    Xml代碼

      4.1.2 常用設定

      AndroidManifest中的通常設定:

      android:launchMode

      啟動模式

      standard,singleTop,singleTask ,singleInstance,

      android:screenOrientation

      螢幕

      landscape橫屏,portrait豎屏

      android:label

      標題名稱

      直接寫字元,或引用xml檔案中的@string/

      android:name

      Activity類名

      注意.。一般是manifest的package加name等於Activity類帶包名的全稱

      Java常用方法

      setContentView()

      設定Activity視圖

      參數可以是①res/layout中的xml檔案,通過R.layout擷取int的id。②View類型的視圖。

      findViewById

      尋找View,在XML

      R中的id。一般設定setContentView為R中的layout,通過這個方法尋找每個組件的引用。

      Java其他方法

      去標題

      super.requestWindowFeature(Window.FEATURE_NO_TITLE)需要在執行setContentView之前操作,否則報錯。

      全屏

      super.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

      橫豎向

      super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);/ ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

      螢幕參數widht,height,dpi等

      Display display = super.getWindowManager().getDefaultDisplay();

      DisplayMetrics displayMetrics = new DisplayMetrics();

      display.getMetrics(displayMetrics);

      display.getWidth()等方法

      displayMetrics.densityDpi等方法

      4.1.3 生命週期


      Activity有7個生命週期。Activity程式入口為方法onCreate或onStart。一些初始化的操作需要在這兩個方法中進行,例如設定layout,初始化控制項,添加事件監聽等。

      每次啟動Activity都是從OnCreare開始,接著onStart,onResume。<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+sLRCYWNrvPy+zb3hyvizzNDyo7pvblBhdXNlo6xvblN0b3CjrG9uRGVzdHJveaO7PC9wPgo8cD6wtGhvbWW8/MfQu7uzzNDyo7pvblBhdXNlo6xvblN0b3CjrMfQu7u72MC0o7pvblJlc3RhcnSjrG9uU3RyYXSjrG9uUmVzdW1loaM8L3A+CjxwPtTawb249tLUyc9BY3Rpdml0ecfQu7vKsaGjQWN0aXZpdHnKx7fxsbtEZXN0cm95yKG+9tPaxvS2r8Sjyr1sYXVuY2hNb2RloaM8L3A+CjxwPiA8L3A+CjxwPiA8L3A+Cjx0YWJsZSBib3JkZXI9"1" cellpadding="0" cellspacing="0" width="982">

      onCreate

      當首次建立Activity時調用。一些設定在該方法中進行:建立視圖,資料繫結等。還以Bundle的形式提供以前儲存的任何狀態的訪問。

      onRestart

      重新啟動Activity時調用。該活動仍在記憶體中,而不是重起一個新的Activity。

      onStart

      當Activity在螢幕上可見時調用。跟著onResume(),

      onResume

      當Activity與使用者互動時調用。

      onPause

      在系統啟動恢複前一個活動時調用。這通常用於未儲存的更改提交到持久性資料、 停止動畫和其他可能會佔用 CPU 等的東西。此方法的實現必須非常快速,因為此方法返回之前不會恢複的下一個活動。跟或 onResume(),如果活動返回到前面或 onStop(),如果它變得對使用者不可見。

      onStop

      因為另一項Activity已恢複或啟動,這個Activity已不再對的使用者可見時調用。這可能發生或者因為正在啟動一項新的Activity,現有之前的這一個Activity或被銷毀。如果這個Activity出錯或失敗將 onDestroy(),如果被使用者重新選中則調用 onRestart()。

      onDestroy

      Activity被銷毀前的最後調用。發生這種情況是因為Activity被finishing (或稱為 finish() ,或因為系統暫時銷毀此活動的Activity以節省空間的。您可以使用 isFinishing() 方法,區分這兩種情況。

      4.2.4 Activity載入模式

      在設定檔中android:launchMode可以進行配置Activity載入模式。四種activity的載入模式:standard,singleTop,singleTask,singleInstance。

      1. standard:預設,表示如果需要就建立。這樣會導致,切換一次Activity,就建立一個。切換多少次,按back鍵就會返貨多少次。

      例如ActivityMain使用standard模式,當他轉到ActivityOtherOne,又切換到ActivityMain時,原先在ActivityMain上面的EditText最開始輸入的文字也就沒有了。

      2. singleTop:如果已經有一個這個Activity執行個體位於Activity棧的頂部時,就不產生新的執行個體。

      3. singleTask: 會在一個新的task 中產生這個執行個體,以後每次調用都會使用這個,不會去產生新的執行個體了。

      4. singleInstance: 這個跟singleTask基本上是一樣,只有一個區別:在這個模式下的Activity執行個體所處的task 中,只能有這個activity執行個體,不能有其他的執行個體。

      4.2 Activity切換

      首先簡單介紹Intent(意圖)。Intent類相當於平台中應用程式之間的通訊網路,Intent是一個要執行的操作的抽象說明,相當於各個Activity之間的橋樑。在一個Activity中想切換到另一個Activity,需要使用方法startActivity,並需要定義一個Intent來指定意圖的組件類。

      4.2.1最簡單的Activity切換

      定義Intent,使用Intent設定需要切換到哪個Activity。使用Activity的startActivity(Intent)方法。

      Java代碼
        Intent intent = new Intent(this, ActivityOtherOne.class); super.startActivity(intent);

        4.2.2使用Intent傳遞資料

        當然也可以在切換Activity的時候傳遞資料。可以直接使用intent的putExtra方法,也可以new一個Bundle傳輸入,但是需要讓intent把bundle進行putExtras下。

        傳參數端的Activity:

        Java代碼
          Intent intent = new Intent(this, ActivityOtherOne.class); Bundle bundle = new Bundle(); bundle.putString("value1", "hello"); intent.putExtras(bundle); intent.putExtra("value2","world"); super.startActivity(intent);

          接收方,例子中的ActivityOtherOne。需要在OnCreate方法中擷取。

          Java代碼
            @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); . . . String value1 = super.getIntent().getExtras().getString("value1"); String value2 = super.getIntent().getExtras().getString("value2"); this.myEditText.setText("value1: " + value1 + ", value2: " + value2); }

            4.2.3帶回傳資料的

            1,在主Activitiy(ActivityMainExample)需要使用startActivityForResult方法切換Activity。其中第二個參數requestCode,只有當>= 0,在轉會此Activity時才會調用onActivityResult方法,得到回傳資料。

            ActivityMainExample類中代碼

            Java代碼
              Intent intent = new Intent(this, ActivityOtherOne.class); Bundle bundle = new Bundle(); bundle.putString("value1", "hello"); intent.putExtras(bundle); intent.putExtra("value2","world"); super.startActivityForResult(intent, 1);

              重寫onActivityResult方法,擷取回傳資料

              Java代碼
                @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { String result1 = data.getExtras().getString("result1"); String result2 = data.getExtras().getString("result2"); Log.v(CommonConfig.LOG_TAG, "ActivityExample onActivityResult, requestCode: " + requestCode + ", resultCode: " + resultCode); Log.v(CommonConfig.LOG_TAG, "ActivityExample onActivityResult data - result1: " + result1 + ", result2: " + result2); }

                2,在另一個Activity插入回傳資料,然後finish。

                ActivityOtherTwo類中代碼。

                Java代碼
                  @Override public void onClick(View v) { super.getIntent().putExtra("result1", "hello android"); super.getIntent().putExtra("result2", "hello google"); super.setResult(Activity.RESULT_OK, super.getIntent()); super.finish(); }

                  4.3 其他常用的Activity


                  一些常用的Activity子類,後面將詳細說明如何使用。寫好後更新連結地址

                  ActivityGroup http://limingnihao.iteye.com/

                  TabActivity http://limingnihao.iteye.com/

                  ListActivity http://limingnihao.iteye.com/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.