java - 动态替换 Android fragment

标签 java android android-fragments

我刚刚开始使用 Fragments,我正在尝试动态添加/替换 fragments。

我可以像这样添加它们......

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

    FragmentManager fragMan = getSupportFragmentManager();
    FragmentTransaction fragTran = fragMan.beginTransaction();

    FragOne fOne = new FragOne();
    FragTwo fTwo = new FragTwo();
    FragThree fThree = new FragThree();

    fragTran.add(R.id.frag_cont_one, fOne);
    fragTran.add(R.id.frag_cont_two, fTwo);
    fragTran.commit();



}

但是当我尝试用 fThree 替换 fTwo 时,应用程序崩溃了。这是我如何进行替换

fragTran.replace(R.id.frag_cont_two, fThree);
fragTran.addToBackStack(null);
fragTran.commit();

有什么想法吗?

谢谢

10-08 21:30:44.710: E/Trace(3219): error opening trace file: No such file or directory (2)
10-08 21:30:44.869: D/AndroidRuntime(3219): Shutting down VM
10-08 21:30:44.869: W/dalvikvm(3219): threadid=1: thread exiting with uncaught exception         (group=0x40a71930)
10-08 21:30:44.889: E/AndroidRuntime(3219): FATAL EXCEPTION: main
10-08 21:30:44.889: E/AndroidRuntime(3219): java.lang.RuntimeException: Unable to start activity ComponentInfo{evans.louis.fragments/evans.louis.fragments.Home}: java.lang.IllegalStateException: commit already called
10-08 21:30:44.889: E/AndroidRuntime(3219):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at android.os.Looper.loop(Looper.java:137)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at android.app.ActivityThread.main(ActivityThread.java:5041)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at java.lang.reflect.Method.invokeNative(Native Method)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at java.lang.reflect.Method.invoke(Method.java:511)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at dalvik.system.NativeStart.main(Native Method)
10-08 21:30:44.889: E/AndroidRuntime(3219): Caused by: java.lang.IllegalStateException: commit already called
10-08 21:30:44.889: E/AndroidRuntime(3219):     at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:582)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at evans.louis.fragments.Home.onCreate(Home.java:37)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at android.app.Activity.performCreate(Activity.java:5104)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
10-08 21:30:44.889: E/AndroidRuntime(3219):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
10-08 21:30:44.889: E/AndroidRuntime(3219):     ... 11 more

编辑:添加了 LogCat

最佳答案

问题就在您的 logcat 输出中:

Caused by: java.lang.IllegalStateException: commit already called

您需要开始一项交易:

fragTran = fragMan.beginTransaction();
fragTran.replace(R.id.frag_cont_two, fThree);
fragTran.addToBackStack(null);
fragTran.commit();

关于java - 动态替换 Android fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19258763/

相关文章:

Java:使用带有箭头键的击键

android - StopService onDestroy 被调用但服务未结束

android - android studio中应用程序崩溃后错误日志和进程自动清除

android - 风格 PreferenceFragmentCompat 像 PreferenceFragment?

android - 数据更改时刷新 fragment 内容的方法(如调用 onCreateView)

android - 如何从调用 fragment 中的 DialogFragment 获取结果?

使用 Jersey/JAXB/Jackson 将 Java.util.Map 映射到 JSON 对象

java - 如何在 Java 中创建 C 风格的 union 体?

Java - 向 JFrame 添加组件

Android换行符和git