簡體   English   中英

將 Android 個碎片保存在 Backstack 中

[英]Keep Android Fragments in Backstack

我正在處理 android 片段,我無法將片段保留在 backstack 中,即當我按下后退按鈕時,它會將我推出啟動片段的 Activity,我想 go 回到 backpress 上的前一個片段。

到目前為止,我已經嘗試過了,但我無法將片段保留在后台。

getActivity().getFragmentManager().beginTransaction()
             .replace(R.id.mainContainer, searchResultsFragment)
             .addToBackStack(null)
             .commit();

在調用commit()來提交事務之前,你應該像在提供的代碼中一樣將片段添加到backstack addToBackStack(null)

然后重寫onBackPressed()從堆棧彈出片段

您面臨的問題是,您使用FragmentManager進行交易

getActivity().getFragmentManager().beginTransaction()
             .replace(R.id.mainContainer, searchResultsFragment)
             .addToBackStack(null)
             .commit();

但是你在onBackPressed()中使用了SupportFragmentManager

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() > 0 ) {
        getSupportFragmentManager().popBackStack();         
    }
}

要修復你的問題,你必須知道你的片段類型匹配(在你的情況下是searchResultsFragment)我的意思是如果它的擴展片段或支持片段

如果您擴展片段支持

import android.support.v4.app.Fragment;

你應該在事務和onBackPressed中使用getSupportFragmentManager()

如果你使用片段

import android.app.Fragment;

你應該在事務和onBackPressed中使用getFragmentManager()

您必須在活動中覆蓋onBackPressed。 僅將片段添加到后台堆棧是不夠的。

@Override
public void onBackPressed() {
    FragmentManager fragmentManager = getSupportFragmentManager();
    if(fragmentManager.getBackStackEntryCount() != 0) {
        fragmentManager.popBackStack();
    } else {
        super.onBackPressed();
    }
}

我只是刪除這一行:

.addToBackStack(null)

並為我工作。

暫無
暫無

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

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