在我的Android应用程序中,我有两个碎片。父片段包含可用过滤器类型的列表,当单击特定过滤器类型时(在父片段 - 黄色背景中),将打开相应的子片段(粉红色背景),其中包含所选过滤器类型的可用选项列表。我的要求是,一旦用户选择/取消选择子片段中的选项,它应该反映/更新父片段中的选项计数(绿色)。
请检查附加的线框。
答案 0 :(得分:1)
您可以使用Otto Bus进行片段,片段活动,服务等之间的通信。
也许,如果你之前没有使用它,第一次你可能有点奇怪,但它非常强大且易于使用。你可以在这里找到图书馆和教程:
一个例子。在您的适配器或您有项目点击事件的地方,您可以通过总线发送一个对象。
在你的总线中,你调用post方法并传递对象。 (我建议为Bus创建一个单例)。
单身巴士提供商。
/**
* Canal de comunicacion
*/
public class BusProvider {
private static final Bus REST_BUS = new Bus(ThreadEnforcer.ANY);
private static final Bus UI_BUS = new Bus();
private BusProvider() {};
public static Bus getRestBusInstance() {
return REST_BUS;
}
public static Bus getUIBusInstance () {
return UI_BUS;
}
}
您在总线(在您的子片段中)发送一个Object,如下所示:
BusProvider.getUIBusInstance().post(itemSelected);
在您的父片段中,您订阅了此事件:
@Subscribe
public void activitySelected(final Item itemSelected) {
}
希望它可以帮到你!!
答案 1 :(得分:0)
即使我的答案可能会迟到,我想它仍然有帮助:
解决方案很简单,如果您需要从子代码访问父代码片段,则在将其添加到堆栈时使用父代的特定标记,如下面的代码示例所示:
1)在包含活动中:
// We instanciate the parent fragment
ParentFragment parentFragment = new ParentFragment();
FragmentTransaction ft = fm.beginTransaction();
// We add the parent fragment with a tag, so we can use it later to fetch
// the current instance of the parent fragment from the child fragment
ft.replace(R.id.content_frame, parentFragment, "parent_fragment_tag");
ft.addToBackStack(null);
// Commit transaction
ft.commit();
2)在子片段中,我们得到当前的父片段实例:
Fragment parentFragment = getFragmentManager().findFragmentByTag("parent_fragment_tag");
我希望这个答案可以提供帮助。