【问题标题】:fragment to fragment interface and transaction replace片段到片段接口和事务替换
【发布时间】:2017-10-09 03:45:01
【问题描述】:

我创建了一个默认的 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);
    }


}

它适用于 Fragment 4(它从 Fragment 5 到 4)但是当我尝试使用 Fragment 3 做同样的事情时它会崩溃(崩溃发生在事务替换中,它不会替换 frag3 布局)事实上我尝试使用 Fragment 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)

【问题讨论】:

  • 发布您的堆栈跟踪
  • 对不起,我是菜鸟,但我是否可以通过在 logcat 中运行带有调试功能的应用程序来获取堆栈跟踪?
  • @Sony 我做到了

标签: android interface


【解决方案1】:

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

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

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

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

【讨论】:

  • 我应该如何确保容器出现在活动的布局中
  • 我尝试将 <fragment> 添加到它不起作用的活动中
  • 你的Activity布局中的片段容器id(FragmeLayout)和你在replace方法中设置的id一样吗?错误可能是因为找不到您所指的 Id 的视图。
  • 我的片段是容器不在我的活动布局中。我正在使用 pagerAdapter,所以当我将片段放入我的活动布局中时,它会给我一个错误
猜你喜欢
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多