這次的教學會比較冗長
因為步驟實在有點多...
若要在 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