標籤:android style blog color io 使用 ar for 檔案
Activity是android四大組件之一,activity 可以看成是一個螢幕,使用者可以在這裡做一些操作。activity通常都是滿屏的,但也可以小於螢幕而浮於其它視窗之上,比如把activity 的風格設定為 dialog
如何建立一個Activity
首先,我們需要為這個activity 建立一個介面(布局)
然後,我們需要建立一個類,這個類是 Activity 的子類。
接著,在這個類裡 重寫onCreate 方法,並且在該方法裡載入布局檔案(setContentView),初始化控制項(findViewById).
最後,需要在androidmanifest.xml 裡聲明這個activity。
如果,你 想設定 該activity 為程式的入口,你需要為該activity 設定 intent-filter
1 <!-- 入口申明 -->2 <intent-filter>3 <action android:name="android.intent.action.MAIN" />4 5 <category android:name="android.intent.category.LAUNCHER" />6 </intent-filter>
啟動一個新的activity 我們可以使用 startActivity 這個方法
1 Intent intent = new Intent(this,SecondActivity.class);2 intent.putExtra("type", type);3 startActivity(intent);
以上代碼錶示,我要開啟一個 SecondActivity,同時 給它傳遞一個資料過去。
有時候,我們 需要開啟其他應用程式,這個時候,使用上面這個方式 就做不到了。
我們需要採用隱式Intnet的方式來開啟
1 Intent intent = new Intent(Intent.ACTION_CALL);2 Uri uri = Uri.parse("tel:110");3 intent.setData(uri);4 startActivity(intent);
以上代碼錶示的是:撥打110。
注意:撥號需要撥號許可權
<uses-permission android:name="android.permission.CALL_PHONE" />
如果我們的應用程式,運行被其他應用程式調用,我們需要 在 androidmanifest.xml 找到可以被喚起的activity,在這個節點 裡定義一個intent-filter,設定我們自己的action
1 <intent-filter >2 <action android:name="com.zy.android.firstandroid"/>3 <category android:name="android.intent.category.DEFAULT"/>4 </intent-filter>
設定好了之後,我們在其他應用程式裡 就可以通過以下的方式 訪問這個 activity
1 Intent intent = new Intent("com.zy.android.firstandroid");2 startActivity(intent);
有時候,我們不僅僅是啟動一個新activity,我們可能需要 接收新activity 返回來的資料,如果用startActivity 這種方式,我們就沒法擷取返回的資料
android為我們提供了另一種方式 可以 滿足這個需求
使用 startActivityForResult 替代 startActivity
同時,我們需要在 接收資料的這個activity裡 重寫 onActivityResult 這個回調方法。當新activity 返回資料的時候,我們就可以在這個方法裡擷取到資料
1 @Override2 protected void onActivityResult(int requestCode, int resultCode, Intent data) {3 // TODO Auto-generated method stub4 super.onActivityResult(requestCode, resultCode, data);5 //requestCode 請求碼6 //resultCode 結果碼7 //data 新activity返回的資料存放區在這裡,可以取出來使用8 }
activity的生命週期 不在這個地方給大家做介紹了。
接下來 我們介紹下 儲存activity的狀態
我們知道,當activity的狀態處於 onPause,onStop,的時候 有可能會被系統kill掉,如果被系統kill掉之後,使用者返回回來,看到的 是一個全新的介面,可是使用者並不知道 系統kill掉了之前的activity,使用者就會覺得很奇怪,咦,我剛才的操作呢?哪去了?哪去 了?
如果這樣的事情真的發生,這將會是一個非常不友好的應用!
為了避免出現這個的情況,我們需要在 系統kill掉activity之前 把一些資料儲存下來。
activity為我們提供了一個回調方法 叫 onSaveInstanceState()
我們可以重寫這個方法,然後在該方法裡 做資料儲存操作,儲存到 Bundle裡去
1 @Override2 protected void onSaveInstanceState(Bundle outState) {3 // TODO Auto-generated method stub4 super.onSaveInstanceState(outState);5 outState.putString("name", "使用者操作資料");6 }
儲存之後,我們從什麼地方取呢? 我們可以在2個地方取到這些資料
仔細的園友 可定會發現這樣一個問題,onCreate 這個方法裡有個參數,可以為什麼我們一直沒使用過它? 其實 這個參數 就是 我們剛才儲存的資料,到系統kill掉之後,我們如果做了資料儲存,那麼系統 在下次開啟這個activity 的時候 會把這個資料一起給我們帶進來
so,我們可以在 onCreate 這個方法裡 擷取資料
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 // TODO Auto-generated method stub 4 super.onCreate(savedInstanceState); 5 setContentView(R.layout.result_layout); 6 //擷取 系統kill之前儲存的資料 7 if(savedInstanceState!=null){ 8 String name = savedInstanceState.getString("name"); 9 }10 11 tv_info = (TextView) findViewById(R.id.tv_info);12 btn_email = (Button) findViewById(R.id.btn_email);13 btn_phone = (Button) findViewById(R.id.btn_phone);14 15 btn_email.setOnClickListener(click);16 btn_phone.setOnClickListener(click);17 18 }
我們還可以重寫 onRestoreInstanceState() 這個回調方法,在這個方法裡同樣也可以擷取到 系統killactivity之前儲存的資料
跟我學android-Activity介紹