这是 fragment 之间通信的正确方式吗?
public class MainActivity extends AppCompatActivity implements IFragmentsHandler {
@Override
protected void onCreate(Bundle savedInstanceState) {
//...
}
@Override
protected void startFragment1() {
Fragment1 f1 = new Fragment1();
f1.setFragmentsHandler(this);
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, f1)
.commit();
}
@Override
protected void startFramgment2() {
Fragment1 f2 = new Fragment1();
f2.setFragmentsHandler(this);
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, f2)
.commit();
}
}
<小时/>
public class Fragment1 {
private IFragmentsHadnler fragmentsHandler;
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment1, container, false);
//...Code...
fragmentsHandler.startFragment1();
}
public void setFragmentsHandler(IFragmentsHandler fragmentsHandler) {
this.fragmentsHandler = fragmentsHandler;
}
}
<小时/>
public class Fragment2 {
private IFragmentsHadnler fragmentsHandler;
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment2, container, false);
//...Code...
fragmentsHandler.startFragment2();
}
public void setFragmentsHandler(IFragmentsHandler fragmentsHandler) {
this.fragmentsHandler = fragmentsHandler;
}
}
<小时/>
[EDIT1]:发布界面(尽管很明显)
public interface IFragmentsHandler {
public void startFragment1();
public void startFragment2();
}
从我的 Java 角度来看,这会抛出 OutOfMemoryError,但如果 Android 也是如此,我不会。无论如何, fragment 之间的首选通信方式是什么?
最佳答案
根据android developer guide ,fragment之间的通信是通过关联的Activity来完成的。
fragment 使用他的接口(interface)与 Activity 进行通信。 Activity 通过使用 findFragmentById() 捕获 Fragment 实例或根据需要创建一个 Fragment 实例来传递消息,然后直接调用另一个 Fragment 的公共(public)方法。
- Fragment1想要传递一些数据:使用他由Activity实现的接口(interface)方法。
- Activity 执行接收数据的方法,创建并替换或查找(取决于您的布局)Fragment2 并传递此数据或在fragment2 类上执行某些公共(public)方法(取决于您的布局)。
- Fragment2 从包中提取数据或执行(取决于您的布局)其公共(public)方法来接收数据。
我认为您代码中的问题是您误解了接口(interface)的目的。您正在使用调用该方法的同一个 fragment 来启动。 Fragment1 在 onCreateView() 中调用 startFragment1(),但它已经启动了。
如果您需要,请在 here有一个很好的教程。
关于java - fragment 之间通信的正确方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42873185/