Android选项卡式活动 - 将嵌套片段中的微调器值传递给父活动中的选项卡片段

时间:2015-03-30 17:54:05

标签: java android android-fragments tabs

那是满口的。我有一个带有两个选项卡的基本选项卡式活动,每个选项卡与一个微调器共享一个片段,该微调器在每个选项卡的布局文件中声明:

标签1:

<fragment android:name="com.me.fragment.DetailsFragment"
          android:id="@+id/DetailsFragment1"
          android:layout_width="match_parent"
          android:layout_height="wrap_content" />

标签2:

<fragment android:name="com.me.fragment.DetailsFragment"
          android:id="@+id/DetailsFragment2"
          android:layout_width="match_parent"
          android:layout_height="wrap_content" />

主要的Tabbed Activity类当然有两个嵌套的静态Fragment类;每个标签一个。

public class MyTabbedActivity extends FragmentActivity
{
    public static class FirstTabFragment extends Fragment
    {
        //get value from DetailsFragment and "refresh" display values
    }

    public static class SecondTabFragment extends Fragment
    {
        //...
    }
}

我正在尝试将上面嵌套的DetailsFragment中微调器的选定值传递给选项卡式活动中的嵌套静态选项卡类,因此可以在其中过滤数据。

也就是说......首次加载活动时,会调用一组默认数据并显示在选项卡中。当精简器选择在DetailsFragment中更改时,会将参数传递给制表符类并过滤数据,并更改显示的值。

我能够通过接口将一个值从DetailsFragment传递给主活动(MyTabbedActivity),但我不确定如何将该值传递给嵌套的FirstTabFragment和SecondTabFragment片段,并刷新/重新加载视图。

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

如果您愿意使用库,我强烈推荐Event Bus

然后在您的详细信息片段中,您只需

EventBus.getDefault().post(value);

在片段中,您希望获得值add

EventBus.getDefault().register(this);

到onCreate并创建一个名为

的方法
public void onEvent(ValueType value){
    // do what you want with the value here
}

这将获取您的值并将其发布到与该值类型匹配的任何内容(即,如果您的值是String,则任何以字符串形式接收的onEvent方法都将接收该值)。因此,建议创建一个事件类来代替传递。

public class DetailFragmentEvent{
    private String value;

    public DetailFragmentEvent(String value){
        this.value = value;
    }

    public String getValue(){
        return value
    }
}

然后在你的帖子中传递。这样您就可以将事件分开。您可以将事件总线与您想要的任何对象一起使用,它比编写大量接口简单得多。

此外,在任何课程中注册事件总线,请在销毁时取消注册。

@Override
public void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);
}