- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我目前正在使用一个 ActionBarActivity
和多个 Fragments
,例如 ListFragment
和 MapFragment
,它们在单个 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/
我正在创建一个锻炼列表,该列表使用 RecycleViewer 显示并使用 RecycleViewer Adapter 和 ViewHolder 填充。 RecycleViewer 包含在一个 fra
我坚持要恢复 fragment 的动画。我正在添加这样的 fragment A3Fragment a3Fragment = new A3Fragment(); FragmentTransaction
当我在我的手机上快速按下返回、返回、返回时,出现以下异常: java.lang.NullPointerException at android.app.FragmentManagerImpl.exec
我的后台上有fragmentA,屏幕上有fragmentB。我想用fragmentC 替换fragmentB,以便当用户按回时,我们返回到fragmentA。这就是我用fragmentC替换fragm
谁能告诉我 popBackStackImmediate 和 popBackStack 之间的区别?我真的不明白,另外 popBackStack 的第二个中的“标志”0(零)是什么意思? 非常感谢你们的
当序列中的所有 fragment 都添加到后台堆栈时,Popbackstack 工作正常,但当其中一个事务未添加到后台堆栈时,Popbackstack 无法正常工作。 这是我的导航: 1.替换 fra
我目前正在使用一个 ActionBarActivity 和多个 Fragments,例如 ListFragment 和 MapFragment,它们在单个 FrameLayout View 中交换。
有时执行 android.support.v4.app.FragmentManager#popBackStackImmediate() 会导致下一个异常: > Fatal Exception: jav
我的代码中有这一行: getChildFragmentManager().popBackstackImmediate(); 它有时可以工作,但经常会崩溃。这是堆栈跟踪: java.lang.NullP
我试图避免使用此方法将相同的 fragment 添加到 backStack: public static void replaceFragment(FragmentManager fragmentMa
我在 4 号 fragment 。在第 4 个 fragment View 上,当我单击取消按钮时,它会转到第 2 个 fragment 。但我使用 popBackStackImmediate 它在第
我是一名优秀的程序员,十分优秀!