gpt4 book ai didi

android - 是否最好使用 Activity.onAttachFragment 或 Fragment.onAttach 在 Activity 和嵌套 fragment 之间进行通信?

转载 作者:IT老高 更新时间:2023-10-28 22:22:55 24 4
gpt4 key购买 nike

Android 文档建议,要从 Activity 与托管 Fragment 进行通信,该 Fragment 可以定义一个回调接口(interface)并要求宿主 Activity 实现它。基本模式包括在您的 fragment 中实现 onAttach,并将 Activity 转换为回调接口(interface)。见 http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity .

这是一个为 fragment 提供一些初始化数据以及监听导航回调的示例。

public class HostActivity extends Activity implements FragmentHost {
@Override
UiModel getUiModel() {
return mUiModel;
}
@Override
FragmentNavListener getNavListener() {
return mNavListener;
}
...
}

public class HostedFragment extends Fragment {
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof FragmentHost) {
FragmentHost host = (FragmentHost) activity;
setUiModel(host.getUiModel());
setNavListener(host.getFragmentNavListener());
}
}
...
}

将此与在宿主 Activity 中使用 onAttachFragment 显式初始化 fragment 进行比较:

public class HostActivity extends Activity {
@Override
public void onAttachFragment(Fragment fragment) {
super.onAttachFragment(fragment);
if (fragment instanceof HostedFragment) {
HostedFragment hostedFragment = ((HostFragment) fragment);
hostedFragment.setUiModel(mUiModel);
hostedFragment.setNavListener(mNavListener);
}
}
...
}

在我看来,第一种模式似乎有一些缺点:

  1. 它使 fragment 更难在不同的 Activity 中使用,因为因为所有这些 Activity 都必须实现所需的接口(interface)。我可以想象给定 fragment 实例不需要完全由宿主 Activity 配置,但所有潜在宿主 Activity 都需要实现宿主接口(interface)的情况。
  2. 对于不熟悉所用模式的人来说,这会使代码更难理解。在 onFragmentAttached 中初始化 fragment 似乎更容易理解,因为初始化代码位于创建 fragment 的同一类中。
  3. 使用像 Robolectric 这样的库进行单元测试变得更加困难,因为在调用 onAttach 时,您现在必须实现 FragmentHost 而不仅仅是调用 onAttach(new Activity()。

对于那些从事过分散交流 Activity 的人,您认为哪种模式更可取,为什么?从宿主 Activity 中使用 onAttachFragment 有缺点吗?

最佳答案

我不能亲自谈论测试,但 fragment/Activity 回调接口(interface)通信有替代方案。

例如,您可以使用事件总线来解耦 fragment 和您的 Activity 。可以在此处找到出色的事件总线:

Otto - An event Bus by Square

Square 的一些非常有才华的工程师正在积极开发它。您还可以使用打包在 Android 支持库中的 LocalBroadcastManager。

LocalBroadcastManager

来自 Square 的 Eric Burke 有一个演示文稿,他提到了这两个可以在这里找到:

Android App Anatomy

关于android - 是否最好使用 Activity.onAttachFragment 或 Fragment.onAttach 在 Activity 和嵌套 fragment 之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12900640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com