Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發學習 之 四、Activity

Android開發學習 之 四、Activity

編輯:關於Android編程

四、Activity

4.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。<喎?/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/

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved