【问题标题】:Android Tabbed Activity - pass spinner value from nested fragment, to tab fragment in parent activityAndroid选项卡式活动 - 将微调器值从嵌套片段传递到父活动中的选项卡片段
【发布时间】:2015-03-30 17:54:04
【问题描述】:

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

标签 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 片段,并刷新/重新加载视图。

最好的方法是什么?

【问题讨论】:

    标签: java android android-fragments tabs


    【解决方案1】:

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

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

    EventBus.getDefault().post(value);
    

    并且在你想要接收增值的片段中

    EventBus.getDefault().register(this);
    

    到 onCreate 并调用一个方法

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

    这将获取您的值并将其发布到与该值类型匹配的任何内容(即,如果您的值是字符串,则将字符串作为参数的任何 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);
    }
    

    【讨论】:

    • @Zameron - 如果可能的话,我宁愿避免使用任何额外的库。那么这是需要的吗?另一个接口侦听器将值从主活动传递到选项卡片段类?
    • 是所有的fragment同时存在,还是从detailfragment中获取值后启动fragment?
    • 所有片段始终存在,没有一个片段会根据变化的参数进行交换或更改。我正在使用顶部的微调器来过滤选项卡片段中的数据,仅此而已。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多