簡體   English   中英

合成Android片段backstack

[英]Synthesize Android fragment backstack

我有一個活動,它使用片段來更改視圖而不是啟動新活動。 假設我有3個片段A,B和C.當應用程序啟動時,默認片段設置為A.用戶可以單擊A上的按鈕轉換到B - 與B到C相同。

因此,后台堆棧看起來像:[A] - > [B] - > [C]

我需要做的是直接從通知中直接鏈接到片段C,同時仍然構建backstack,以便在啟動活動時。 應顯示片段C,同時允許用戶單擊后退按鈕分別返回視圖B和A.

您可以進行3次單獨的交易。 這比手動檢查Backstack的狀態要自然得多。

@Override 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    showFragmentA();

    if (getIntent().hasExtra("some_deep_link_flag")) {
        showFragmentB();
        showFragmentC();
    }
}

private void showFragmentA() {
    Fragment a = new Fragment();

    getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, a)
            .addToBackStack(null)
            .commit();
}

private void showFragmentB() {
    Fragment b = new Fragment();

    getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, b)
            .addToBackStack(null)
            .commit();
}

private void showFragmentC() {
    Fragment c = new Fragment();

    getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, c)
            .addToBackStack(null)
            .commit();
}

如果堆棧總是轉到A - > B - > C,那么你可以覆蓋活動中的onBackPressed()並彈出后台堆棧並檢查片段堆棧中的情況。

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getFragmentByTag("C") != null) {
        if (getSupportFragmentManager().getBackStackEntryCount() == 2) {
            getSupportFragmentManager().beginTransaction.replace(...).commit();
        } else {
            getSupportFragmentManager().popBackStack();
        }
    } else if (getSupportFragmentManager().getFragmentByTag("B") != null) {
        if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
            getSupportFragmentManager().beginTransaction.replace(...).commit();
        } else {
            getSupportFragmentManager().popBackStack();
        }
    } else {
        //You are already on Fragment A
        super.onBackPressed();
    }
}

像jmcdonnell40建議:

我的猜測是你應該在通知意圖上加上額外的內容,這表明你是從通知中輸入你的活動。

然后,在activity的oncreate中,檢查該額外的,如果它存在,只需執行2個必要的片段事務(片段A - > B - > C)並將它們添加到backstack。

無論如何,你將不得不手動打開你的最后一個片段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM