gpt4 book ai didi

android - fragment addToBackStack() 和 popBackStackImmediate() 不起作用

转载 作者:IT老高 更新时间:2023-10-28 22:04:20 34 4
gpt4 key购买 nike

我目前正在使用一个 ActionBarActivity 和多个 Fragments,例如 ListFragmentMapFragment,它们在单个 FrameLayout View 中交换。

ActionBarActivity 自动替换/提交 fragment A。然后,当用户点击按钮时,托管 Activity 替换/提交新的不同 fragment B。我的目标是让用户在按下后立即返回 fragment A后退按钮。

现在有一些代码。

主 Activity

public class MainActivity extends ActionBarActivity implements StopFragment.OnFragmentInteractionListener,
StopItemFragment.OnFragmentInteractionListener {
...

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

fragmentManager = getFragmentManager();
fragmentManager.enableDebugLogging(true);
...
if (fragmentManager.findFragmentById(R.id.content_frame) == null) {
StopItemFragment list = StopItemFragment.newInstance(null); //A - extends ListFragment
fragmentManager.beginTransaction()
.replace(R.id.content_frame, list)
.addToBackStack(null)
.commit();
}
...

@Override
public void onFragmentInteraction(String id) {
selectItem(Integer.parseInt(id));
}


private void selectItem(int position) {
StopFragment fragment = StopFragment.newInstance(null, null); //B - extends Fragment
...
fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment)
.commit();

...
}
}


问题

即使调用了addToBackStack(),当我在fragment B时,我也无法回到fragment A。MainActivity被直接关闭。然而,我试图自己管理后台堆栈,但没有运气。我可以看到 fragment 在堆栈上,但是如果我调用 popBackStackImmediate(), fragment A 会弹出,并且 fragment 事务不会执行。 (第一次后按没有任何反应,第二次 Activity 关闭)

我还附上了 FragmentManager logcat:
http://pastebin.com/hFLHprL8

最佳答案

对于那些仍在寻找解决方案的人。

在主 Activity 类(托管 fragment )中,只需覆盖 onBackPressed()

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

fragment中没有onBackPressed()方法,该方法只针对activity。所以,当我们按下返回键时,activity的默认行为就显示出来了,也就是

you will either go to previous activity(if there is any) or the app will exit.

现在我们需要重写这个方法来告诉activity,当我们按下返回键时,如果返回栈中有 fragment ,则将它们弹出(这就是当 addToBackStack() 出现)。否则遵循默认行为。

关于android - fragment addToBackStack() 和 popBackStackImmediate() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26693754/

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