Search

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

2015-08-15 2:25 PM

這次的教學會比較冗長

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

若要在 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 Activity
Android Start Another Activity