这里有很多关于片段通信的问题,但它们通常是关于从活动获取数据并将数据发送回活动的问题,通常是从片段开始。但是我想知道在创建片段时无法将数据从活动发送到片段的最佳方法是什么?为了澄清起见,让我们假设一个应用程序有 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()
更新所有片段数据。
我想知道这种方法是正确的还是在某些情况下可能不正确?任何想法?有没有更好的方法来通知来自主要活动的片段?
顺便说一句,是否也可以使用处理程序/消息在片段之间进行通信?作为另一种方法?
此致
我能想到三种方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句