這次的教學會比較冗長
因為步驟實在有點多...
若要在 Android 開啟新的 Activity
並開啟螢幕左上方的返回按鈕功能
同時保留上一個 Activity 的頁面資訊
可以使用以下方式
首先 New 一個 Activity 的 Layout
layout -> New -> Activity
之後到 AndroidManifest.xml 內會發現新增的 activity 節點
在節點內加入 parentActivityName 的屬性
- <activity
- android:name=".ArticlesActivity"
- android:label="@string/title_activity_articles"
- android:parentActivityName=".MainActivity" >
- <meta-data
- android:name="android.support.PARENT_ACTIVITY"
- android:value="com.ihad.ptt.MainActivity" />
- </activity>
屬性值為 .MainActivity 也就是要返回的目標 Activity
若你要返回的上一層頁面是 XXXActivity 就填入 .XXXActivity
正確來說就是填入你要啟動新 Activity 時當前的頁面
而 meta-data 節點則是給舊版 Android 辨認用的
加入這個設定後 新 Activity 的 ActrionBar 的左上角就會出現返回按鈕
若啟動後沒有出現則可以在新 Activity 的 onCreate 方法內加入以下程式碼
- ActionBar actionBar = getActionBar();
- actionBar.setDisplayHomeAsUpEnabled(true);
接著就在你要啟動新 Activity 的 Activiy 內使用以下程式碼
以本範例就是在 MainActivity 使用 startActivity 方法啟動 ArticlesActivity
- Intent intent = new Intent(this, ArticlesActivity.class);
- startActivity(intent);
接著最重要的是在新建立的 Activity 中修改 onOptionsItemSelected 方法
以下是預設的程式碼
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // Handle action bar item clicks here. The action bar will
- // automatically handle clicks on the Home/Up button, so long
- // as you specify a parent activity in AndroidManifest.xml.
- int id = item.getItemId();
- //noinspection SimplifiableIfStatement
- if (id == R.id.action_settings) {
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
需要修改為以下程式碼
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // Handle action bar item clicks here. The action bar will
- // automatically handle clicks on the Home/Up button, so long
- // as you specify a parent activity in AndroidManifest.xml.
- int id = item.getItemId();
- switch ( id ){
- // 點擊 ActionBar 返回按鈕時 結束目前的 Activity
- case android.R.id.home:
- finish();
- return true;
- case R.id.action_settings:
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
若沒有修改這一段程式碼
將會導致無法保留上一個 Activity 的狀態
請記住一定要使用 android.R.id.home 這個 id 值
Android Start Another Activity