[英]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.