Search

Android - 切換至新的 Activity 並保留上一頁狀態

2015-08-15 2:25 PM

這次的教學會比較冗長

因為步驟實在有點多...

若要在 Android 開啟新的 Activity

並開啟螢幕左上方的返回按鈕功能

同時保留上一個 Activity 的頁面資訊

可以使用以下方式

首先 New 一個 Activity 的 Layout

layout -> New -> Activity




之後到 AndroidManifest.xml 內會發現新增的 activity 節點

在節點內加入 parentActivityName 的屬性

  1. <activity
  2. android:name=".ArticlesActivity"
  3. android:label="@string/title_activity_articles"
  4. android:parentActivityName=".MainActivity" >
  5. <meta-data
  6. android:name="android.support.PARENT_ACTIVITY"
  7. android:value="com.ihad.ptt.MainActivity" />
  8. </activity>

屬性值為 .MainActivity 也就是要返回的目標 Activity

若你要返回的上一層頁面是 XXXActivity 就填入 .XXXActivity

正確來說就是填入你要啟動新 Activity 時當前的頁面

而 meta-data 節點則是給舊版 Android 辨認用的

加入這個設定後 新 Activity 的 ActrionBar 的左上角就會出現返回按鈕



若啟動後沒有出現則可以在新 Activity 的 onCreate 方法內加入以下程式碼

  1. ActionBar actionBar = getActionBar();
  2. actionBar.setDisplayHomeAsUpEnabled(true);

接著就在你要啟動新 Activity 的 Activiy 內使用以下程式碼

以本範例就是在 MainActivity 使用 startActivity 方法啟動 ArticlesActivity

  1. Intent intent = new Intent(this, ArticlesActivity.class);
  2.  
  3. startActivity(intent);

接著最重要的是在新建立的 Activity 中修改 onOptionsItemSelected 方法

以下是預設的程式碼

  1. @Override
  2. public boolean onOptionsItemSelected(MenuItem item) {
  3. // Handle action bar item clicks here. The action bar will
  4. // automatically handle clicks on the Home/Up button, so long
  5. // as you specify a parent activity in AndroidManifest.xml.
  6. int id = item.getItemId();
  7.  
  8. //noinspection SimplifiableIfStatement
  9. if (id == R.id.action_settings) {
  10. return true;
  11. }
  12.  
  13. return super.onOptionsItemSelected(item);
  14. }

需要修改為以下程式碼

  1. @Override
  2. public boolean onOptionsItemSelected(MenuItem item) {
  3. // Handle action bar item clicks here. The action bar will
  4. // automatically handle clicks on the Home/Up button, so long
  5. // as you specify a parent activity in AndroidManifest.xml.
  6. int id = item.getItemId();
  7.  
  8. switch ( id ){
  9. // 點擊 ActionBar 返回按鈕時 結束目前的 Activity
  10. case android.R.id.home:
  11. finish();
  12. return true;
  13. case R.id.action_settings:
  14. return true;
  15. }
  16.  
  17. return super.onOptionsItemSelected(item);
  18. }

若沒有修改這一段程式碼

將會導致無法保留上一個 Activity 的狀態

請記住一定要使用 android.R.id.home 這個 id 值

各項資料連結
Android Activity
Android Start Another Activity