片段到片段接口和事务替换



我创建了一个默认的 android 页面,其中包含 3 个选项卡和片段管理器,我又向其添加了 2 个片段,到目前为止一切正常,直到我尝试将接口发送到主活动并将数据从那里按捆绑和事务发送到第三个片段:

喜欢这个:

 public void setF4Riddle(int x){
    Frag4 F4 = 
 (Frag4)getSupportFragmentManager().findFragmentById(R.id.frag4);

    if (F4 != null ) {
        F4.getF4Riddle(x);
    } else {
        Frag4 fragment = new Frag4();
        Bundle args = new Bundle();
        args.putInt("Value", x);
        TextView Dialog =(TextView)findViewById(R.id.Dialog);
        Dialog.setText("");
        fragment.setArguments(args);
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.frag4_container, fragment)
                .addToBackStack(null).commit();
        fragment.getF4Riddle(x);
    }

}

它适用于片段 4(从片段 5 到 4),但是当我对片段 3 尝试同样的事情时,它会崩溃(崩溃发生在事务替换中,它不会替换 frag3 布局)事实上,我尝试过片段 2 和 1在所有情况下游戏崩溃( 1 ,2 ,3),但是当我添加更多片段(6 和 7)时,它会再次工作,所以似乎只有前 3 个没有工作有谁知道原因吗?谢谢

堆栈跟踪:

10-09 00:01:46.985 20690-20690/com.redot.puzzle3 E/AndroidRuntime: FATAL EXCEPTION: main
                                                               Process: com.redot.puzzle3, PID: 20690
                                                               java.lang.IllegalArgumentException: No view found for id 0x7f0d0098 (com.redot.puzzle3:id/frag3) for fragment Frag3{128ae004 #5 id=0x7f0d0098}
                                                                   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1326)
                                                                   at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1574)
                                                                   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1641)
                                                                   at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:794)
                                                                   at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2415)
                                                                   at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2200)
                                                                   at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2153)
                                                                   at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2063)
                                                                   at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:725)
                                                                   at android.os.Handler.handleCallback(Handler.java:739)
                                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                   at android.os.Looper.loop(Looper.java:145)
                                                                   at android.app.ActivityThread.main(ActivityThread.java:6873)
                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                   at java.lang.reflect.Method.invoke(Method.java:372)
                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

好吧,我认为问题可能出在您使用 fragmentManager 添加 Frag3 片段时。当您尝试在其中添加片段的片段容器不在活动的视图层次结构中时,可能会出现此错误。例如:

getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.fragmentContainer, frag3)
    .commit();

确保"R.id.fragmentContainer"是指向的正确框架布局,并且它存在于当前活动的布局中。由于您可能在不同的布局中调用片段容器,这可能会导致:

IllegalArgumentException: No view found for id 0x7f0b0061 ... for fragment ... ...

最新更新