片段到片段接口错误(布局)

时间:2017-10-08 03:00:18

标签: android interface

我通过主要活动从片段5到3发送接口:

public void setF3Riddle(int x) {

  Frag3 F3 = (Frag3) getSupportFragmentManager().findFragmentById(R.id.Frag3);

  if (F3 != null) {
     F3.getF3Riddle(x);
  } else {
     Frag3 frag = new Frag3();
     Bundle args = new Bundle();
     args.putInt("Value", x);
     frag.setArguments(args);
     getSupportFragmentManager().beginTransaction()
                                .replace(R.id.Frag3, frag)
                                .addToBackStack(null)
                                .commit();
     frag.getF3Riddle(x);
  }
}

但是在运行时发送数据时崩溃了。当我将.replace(R.id.Frag3,Frag)容器更改为另一个不崩溃的片段时,我注意到了这个问题。这有什么问题?

片段3布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/Frag3"
    tools:context="com.redot.puzzle3.Frag3">

非常感谢您在这件事上的时间和帮助。

1 个答案:

答案 0 :(得分:0)

问题可能来自这里:

Frag3 frag = new Frag3();
Bundle args = new Bundle();
args.putInt("Value", x);
frag.setArguments(args);
getSupportFragmentManager().beginTransaction()
                           .replace(R.id.Frag3, frag)
                           .addToBackStack(null)
                           .commit();
frag.getF3Riddle(x);

您正在使用Frag3 frag = new Frag3();创建片段并放置该分组,然后您希望使用frag.getF3Riddle(x)获取该值。但它会抛出一个错误,因为片段尚未完成创建。片段创建是异步过程。因此,您需要等到Frag创建完成或首先在另一个地方创建它。