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