gpt4 book ai didi

java - Android popBackStack() 不恢复以前的 fragment

转载 作者:行者123 更新时间:2023-11-30 02:17:01 26 4
gpt4 key购买 nike

我有两个 fragment MapScreenFragment 和 SessionSetUpFragment,它们与我的 Activity MapsActivity 一起进出。我总是先转到 MapScreenFragment,然后 MapScreenFragment 上会出现一个按钮,它会回调 MapsActivity 并将当前 fragment 替换为 SessionSetUpFragment。所以 fragment 管理器堆栈应该有 SessionSetUpFragment,然后是 MapScreenFragment。当我点击 SessionSetUpFragment 上的 android 后退按钮时,它显示一个空白屏幕,并且 MapScreenFragment 的 onCreateView() 或 onResume() 永远不会被调用。另一个 android 后退按钮调用将关闭应用程序。如何让 MapScreenFragment 恢复?

编辑:如果我改变

getFragmentManager().popBackStack("sessFrag", FragmentManager.POP_BACK_STACK_INCLUSIVE);

getFragmentManager().popBackStack();

问题仍然存在,但在应用程序关闭之前我还有一个空白的后屏幕要经过

enter image description here enter image description here

MapScreenFramget.java:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_map, container, false);

Log.d(TAG,"onCreateView"); //Never gets called
}

@Override
public void onResume() {
Log.d(TAG,"onResume"); //Never gets called
super.onResume();
}

MapsActivity.java:

 @Override
public void logIn(){
MapScreenFragment mapFrag = new MapScreenFragment();
getFragmentManager().beginTransaction().replace(R.id.mainContainer, mapFrag).addToBackStack("mapFrag").commit();
}

@Override
public void sessionSetUp(){
SessionSetUpFragment sessFrag = new SessionSetUpFragment();
getFragmentManager().beginTransaction().replace(R.id.mainContainer, sessFrag).addToBackStack("sessFrag").commit();
}

@Override
public void onBackPressed() {
if(fm.getBackStackEntryCount() > 0) {
Log.i(TAG, fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1) + " Popped! " + (fm.getBackStackEntryCount() - 1) + " stacks left!");

getFragmentManager().popBackStack("sessFrag", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}else {
super.onBackPressed();
}
}

最佳答案

由于 MapScreenFragment 是您的第一个 fragment ,您可能想尝试在 中调用 add() 而不是 replace()登录()方法。并且不要将它添加到后台。将 MapScreenFragment 添加到后台堆栈会导致您看到空白空间。

接下来,您的 sessionSetUp() 方法看起来不错。因为您已经将 SessionSetUpFragment 添加到 backStack,所以您不需要覆盖 onBackPressed()。这对我一直很有效。

关于java - Android popBackStack() 不恢复以前的 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29132635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com