【发布时间】:2019-01-30 09:25:36
【问题描述】:
问题,FragmentActivity(称为A)如何与另一个Fragment(称为B)交互,B依赖于Fragment(称为C),但C尚未被告知做B。
假设,C 还没有 OnButtonClick(),所以 B 还没有被转换到,但是 A 有 OnButtonClick(),所以现在 A 和 B 可以通信了。
场景, A 是一些视图,它有一个按钮来随机添加、更新、删除、修改 B 中的谷歌地图。 C是一些视图,有一个按钮可以转换到谷歌地图视图,这个视图可以反映来自B的动态更新。
A 的流,A 中的 OnButtonClick() 与 B交互。
C 的流程,C 中的 OnButtonClick(),过渡到 B。
public class A extends FragmentActivity implements OnClickListener {
@Override
public void onClick(View v) {
onButtonClick(/*interact with B*/);
}
}
public class C extends Fragment implements OnClickListener {
@Override
public void onClick(View v) {
onButtonClick(/*transition to B*/);
FragmentManager fragmentManager = this.getFragmentManager();
FragmentTransaction fragmentTransaction =
fragmentManager.beginTransaction();
Fragment map = new B();
fragmentTransaction.replace(R.id.layout_of_C, layout_of_B);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}
public class B extends Fragment implements OnMapReadyCallback {
@Override public void onMapReady(GoogleMap map){
...some map stuff...
}
}
【问题讨论】:
-
我考虑过使用以下方法:(1)接口回调将接口放置在 A 上并从 B 回调,(2)自 GoogleMap 以来,在我的 MainActivity 中使用 FragmentManager 或新类之类的东西实例化 B将成为我应用程序中某些类的共享对象,(3) 将包从 B 传递到 A,(4) 可序列化接口并从 B 传递到 A,(5) 使用 AsyncTask 从 B 到 A 通信,(6)我正在查找 EventBus,但老实说,我不确定这是否会带来可行的解决方案。
-
是否可以创建一个包含 Fragment B 的 Fragment D?重构代码,使 A 与 D 交互,C 过渡到 B,B 具有 A 和 C 需要的通用功能。
-
@hjchin,澄清一下,A(视图)与 D(SharedGoogleMap)交互,C(视图)转换到 B(GoogleMapLoader),B(GoogleMapLoader)实现 D(SharedGoogleMap)?
-
@hjchin,那么,B 将更新 D,而 A 将获得这些更新?我非常倾向于为此使用界面,我唯一担心的是在 A 获得更新之前谷歌地图可能还没有准备好......请分享你的想法。谢谢。
-
你的B是A和C都可以访问的同一个实例吗?如果不是这种情况,你将创建 B 的不同实例,然后 D 可以在其片段中包含 B。 D和C类似,不同的是你不做transit,直接在D的xml中附加B的片段。我希望我能正确理解您的问题和答案。
标签: java android android-fragments android-intent