Android頁面跳轉與返回機制詳解

招风的黑耳發表於2024-09-28

在Android開發中,頁面跳轉是實現應用功能互動的重要手段之一。本文將從Activity之間的跳轉、Activity與Fragment之間的跳轉、Fragment之間的跳轉以及頁面返回的問題四個方面進行詳細解析。

一、Activity之間的跳轉

Activity是Android應用的基本構建塊,代表了一個使用者介面的單一螢幕。Activity之間的跳轉主要透過Intent實現。

1. 基本跳轉

基本的Activity跳轉使用startActivity(Intent intent)方法。首先,需要建立一個Intent物件,並指定目標Activity的類。然後,呼叫startActivity()方法啟動該Activity。示例程式碼如下:

Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
startActivity(intent);
2. 帶引數的跳轉

如果需要向目標Activity傳遞資料,可以在Intent中使用putExtra(String name, Object value)方法新增引數。在目標Activity中,透過getIntent().getExtras().get(String name)getIntent().getStringExtra(String name)等方法獲取傳遞的資料。示例程式碼如下:

// 傳送資料
Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
intent.putExtra("key", "value");
startActivity(intent);

// 接收資料
String value = getIntent().getStringExtra("key");
3. 返回資料

有時,需要從目標Activity返回資料給啟動它的Activity。這可以透過startActivityForResult(Intent intent, int requestCode)方法啟動目標Activity,並在目標Activity中呼叫setResult(int resultCode, Intent data)方法設定返回資料。啟動Activity的Activity會收到onActivityResult(int requestCode, int resultCode, Intent data)回撥,從而獲取返回的資料。示例程式碼如下:

// 啟動Activity並等待結果
Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
startActivityForResult(intent, 1);

// 在TargetActivity中設定返回資料
Intent returnIntent = new Intent();
returnIntent.putExtra("result_key", "result_value");
setResult(Activity.RESULT_OK, returnIntent);
finish();

// 接收返回資料
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1 && resultCode == Activity.RESULT_OK) {
        String result = data.getStringExtra("result_key");
    }
}

二、Activity與Fragment之間的跳轉

1. Activity到Fragment的跳轉

Activity中啟動Fragment通常使用FragmentManagerFragmentTransaction。首先,獲取FragmentManager的例項,然後開啟一個事務(Transaction),透過add()replace()show()等方法新增或顯示Fragment,最後提交事務。示例程式碼如下:

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, new TargetFragment());
fragmentTransaction.commit();
2. Fragment到Activity的跳轉

Fragment中啟動Activity與Activity中啟動Activity的方式相同,都是使用Intent和startActivity()startActivityForResult()方法。由於Fragment沒有自己的Context,因此需要使用宿主Activity的Context來建立Intent。示例程式碼如下:

Intent intent = new Intent(getActivity(), TargetActivity.class);
startActivity(intent);

三、Fragment之間的跳轉

Fragment之間的跳轉也是透過FragmentManager和FragmentTransaction實現的。與Activity到Fragment的跳轉類似,但需要注意的是,Fragment之間的跳轉通常發生在同一個Activity內部。示例程式碼如下:

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.hide(currentFragment);
fragmentTransaction.show(targetFragment);
fragmentTransaction.commit();

或者,如果需要完全替換Fragment,可以使用replace()方法:

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, new TargetFragment());
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

四、頁面返回的問題

在Android中,頁面返回通常透過按下物理返回鍵或系統導航欄的返回按鈕觸發。Activity的onBackPressed()方法會在使用者按下返回鍵時被呼叫,可以在此方法中實現頁面返回的邏輯。

對於Fragment,如果需要在Fragment中處理返回事件,可以在宿主Activity的onBackPressed()方法中判斷當前顯示的Fragment,並據此執行相應的返回邏輯。另外,如果Fragment有自己的返回按鈕,可以在按鈕的點選事件中呼叫宿主Activity的onBackPressed()方法或執行其他返回邏輯。

總結來說,Android中的頁面跳轉和返回機制透過Intent、FragmentManager和FragmentTransaction等元件實現,為開發者提供了靈活多樣的頁面互動方式。掌握這些機制對於開發高質量的Android應用至關重要。

相關文章