ree*_*olt 26 android android-fragments
我的项目包含两个片段:
fragmentA单击按钮完成时的操作.这是我主视图的XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/main_fragment_container"
android:name="fragmentA"
android:layout_width="match_parent"
android:layout_height="match_parent">
</fragment>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
当我想以取代FragmentA由FragmentB,我用这个代码:
FragmentTransaction fragmentTransaction = getSupportFragmentManager()
.beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.main_fragment_container, new FragmentB());
fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常.我的FragmentA被新的替换FragmentB.但是,当点击上后退按钮做的,我希望更换FragmentB被FragmentA使用popBackStackImmediate().
这是我使用的代码:
if (getSupportFragmentManager().getBackStackEntryCount() > 0){
boolean done = getFragmentManager().popBackStackImmediate();
fragmentTransaction.commit();
}
Run Code Online (Sandbox Code Playgroud)
该函数popBackStackImmediate返回false并且FragmentB仍处于前台.
我打电话时为什么FragmentA不会替换FragmentB popBackStackImmediate?有人有想法解决我的问题吗?
提前致谢
owe*_*owe 45
您使用getSupportedFragmentManager()替换FragmentA为FragmentB.但你打电话popBackStack()给getFragmentManager().
如果您要将片段添加到android.support.v4.app.FragmentManager您还需要调用popBackStack()它们FragmentManager.
这段代码应该解决问题:
if (getSupportFragmentManager().getBackStackEntryCount() > 0){
boolean done = getSupportFragmentManager().popBackStackImmediate();
}
Run Code Online (Sandbox Code Playgroud)
问题是你是Fragment支持库中的混合和方法.
如果您使用的是支持库,请确保:
Activity延伸android.support.v4.app.FragmentActivityFragment延伸android.support.v4.app.FragmentgetSupportFragmentManager()得到android.support.v4.app.FragmentManager你的代码Activity将是:
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStackImmediate();
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您想FragmentManager从Fragment代码中获取,则必须使用getFragmentManager方法,如文档中所述(如果您没有太多经验,可能会导致一些混淆).
如果您不使用支持库:
Activity延伸android.app.ActivityFragment延伸android.app.FragmentgetFragmentManager()得到android.app.FragmentManager你的代码是:
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStackImmediate();
}
Run Code Online (Sandbox Code Playgroud)
fragmentTransaction.commit(); 在这两种情况下都没有必要,所以删除它.
另外,请在其他操作fragmentTransaction.addToBackStack(null);之前调用commit.
你应该打电话
fragmentTransaction.addToBackStack(null);
Run Code Online (Sandbox Code Playgroud)
执行所有操作后,例如add(),remove()和replace()以及在commit()之前.只有这时才会将此事务添加到Backstack中.只有这样,您才能使用" 返回"按钮返回到先前的片段状态.细节在这里.
| 归档时间: |
|
| 查看次数: |
39911 次 |
| 最近记录: |