从子片段

时间:2016-04-25 07:26:50

标签: android android-layout android-fragments

在我的Android应用程序中,我有两个碎片。父片段包含可用过滤器类型的列表,当单击特定过滤器类型时(在父片段 - 黄色背景中),将打开相应的子片段(粉红色背景),其中包含所选过滤器类型的可用选项列表。我的要求是,一旦用户选择/取消选择子片段中的选项,它应该反映/更新父片段中的选项计数(绿色)。

请检查附加的线框。

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以使用Otto Bus进行片段,片段活动,服务等之间的通信。

也许,如果你之前没有使用它,第一次你可能有点奇怪,但它非常强大且易于使用。你可以在这里找到图书馆和教程:

http://square.github.io/otto/

一个例子。在您的适配器或您有项目点击事件的地方,您可以通过总线发送一个对象。

在你的总线中,你调用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");

我希望这个答案可以提供帮助。