另一个片段通信

阿夫申

这里有很多关于片段通信的问题,但它们通常是关于从活动获取数据并将数据发送回活动的问题,通常是从片段开始。但是我想知道在创建片段时无法将数据从活动发送到片段的最佳方法是什么?为了澄清起见,让我们假设一个应用程序有 2 个片段可以使用(不能必须)一些数据来改善用户体验,但获取这些数据的成本很高。因此,使用Loader在活动中获取此数据AsyncTask在主要活动中同时创建片段本身。现在,当 Activity 中异步准备好数据时,我们需要将此数据发送到 Fragments。什么是最好的方法?我想到了这样做的方法,我想知道这种方法是否有任何问题。

1-In 片段我们onAttach用来将片段发送到活动并检查是否已经读取了任何数据:

@Override
public void onAttach (Activity activity) {
    MyActivity act = (MyActivity)activity;
    act.addFragment(this);
    Data data = act.getData();
    if (data != null) {
        setAdditionData(data)
    }
}

2-并在活动存储一个WeakReference到片段:

private ArrayList<WeakReference<Fragment>> mFragments = new ArrayList<>();
...
public void addFragment(Fragment frag) {
    WeakReference<Fragment> f = new WeakReference<Fragment>(frag);
    mFragments.add(f);
}

public Data getData() {
    return mData;
}

public void updateFragmentsData() {
    for (Iterator<WeakReference<Fragment>> iterator = mFragments.iterator(); iterator.hasNext();) {
        WeakReference<Fragment> wf = iterator.next();
        Fragment f = wf.get();
        if (f != null) {
            f.setAdditionData(mData);
        } else {
            iterator.remove();
        }
    }
}

现在,当片段附加时,它会将自己添加到活动中的片段列表中,并检查数据是否已经准备好,如果准备好,它将使用该数据。另一方面,当活动中异步准备好数据时,它可以调用updateFragmentsData()更新所有片段数据。

我想知道这种方法是正确的还是在某些情况下可能不正确?任何想法?有没有更好的方法来通知来自主要活动的片段?

顺便说一句,是否也可以使用处理程序/消息在片段之间进行通信?作为另一种方法?

此致

德班扬

我能想到三种方法。

  1. 使用监听器。在活动中编写一个接口以将其用作侦听器。该片段实现了接口,并在适当的时间注册和取消注册为侦听器。(例如在 onCreateView 和 onDestroyView)。
  2. 这个是我的最爱。我希望 DataBinding 越来越受欢迎,它可以用来解决这个问题。假设您为片段布局定义了一个特定的模型。现在您在模型中使用ObservableFields将此模型传递给您的数据绑定变量。现在从活动或片段本身更改此对象,更改将反映在视图中。
  3. 新引入的ViewModels我将在下一个项目中使用它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

Android片段被另一个片段覆盖

来自分类Dev

ViewPager空白从另一个片段背面

来自分类Dev

使用片段按钮打开另一个活动

来自分类Dev

扩展到另一个片段

来自分类Dev

片段应如何与Android中的另一个类通信?

来自分类Dev

DialogFragment用另一个替换片段

来自分类Dev

如何从另一个片段更新一个片段的ListView?

来自分类Dev

如何与另一个类的Form控件通信?

来自分类Dev

如何控制另一个片段

来自分类Dev

模仿另一个片段的生命周期

来自分类Dev

在另一个片段上滑动一个片段

来自分类Dev

如何从一个片段传递到另一个片段

来自分类Dev

清除片段堆栈以转到另一个

来自分类Dev

来自另一个片段的Snackbar回调

来自分类Dev

在另一个片段内定义NavHostFragment

来自分类Dev

从一个片段到另一个片段的交易问题

来自分类Dev

使用另一个片段中的数据更新一个片段中的listview

来自分类Dev

更改另一个片段内的片段

来自分类Dev

与另一个特定的控制器通信

来自分类Dev

Magento与另一个系统通信

来自分类Dev

与另一个线程中的循环通信

来自分类Dev

片段不会替换并隐藏另一个片段

来自分类Dev

创建一个接口以与另一个片段进行通信

来自分类Dev

无法从一个片段接收数据到另一个片段

来自分类Dev

从另一个片段打开一个片段总是保持前一个片段的标题

来自分类Dev

片段不是从另一个片段启动的

来自分类Dev

将 Spinner 值从一个片段传递到另一个片段

来自分类Dev

将数据从一个片段传递到另一个片段

来自分类Dev

改变另一个片段的片段(列表)