片段中没有的事情?

Fre*_*red 9 android android-fragments

在Google的Fragments 开发人员文档中,他们提到了以下内容:

为了重用Fragment UI组件,您应该将每个组件构建为一个完全独立的模块化组件,以定义自己的布局和行为.一旦定义了这些可重用的片段,就可以将它们与Activity关联,并将它们与应用程序逻辑相连接,以实现整个复合UI.

听起来真的很棒.然而,他们没有比以下更详细:

所有Fragment-to-Fragment通信都是通过相关的Activity完成的.两个碎片永远不应该直接通信.

有什么东西我应该避免在我的碎片中使用/调用/做什么?

我想使用Singleton会通过引入外部依赖/期望来破坏可重用性?

它是可以调用Log.*,SharedPreferences,Toast,并AlertDialog从里面Fragment,或者是你应该避免什么?

是否可以打电话getActionBar()或假设托管Activity确实有一个愚蠢的ActionBar

如果Fragment需要向用户输出内容,无论是错误还是其他什么,它应该自己决定如何输出这个(Log,Toast,AlertDialog等),还是应该将字符串发送到回调并让托管活动决定它应该如何/应该做什么?

一个ListFragment需要得到填充数据呈现给用户.它应该获取数据本身(通过AsyncTask内部类中的网络请求),还是应该请求托管Activity为其获取数据?

Ban*_*eid 2

这个问题问得好。但是,正如您在问题中提到的,官方文档仅指定不要让片段直接相互通信。

现在,根据您的实现,您可能希望通过关联的 Activity 的回调来执行复杂的方法和功能。特别是如果它是更多 Fragment 所共有的功能。

至于简单的东西,比如调用 Log.*、SharedPreferences、Toast 和 AlertDialog,我发现如果您在 Fragment 中完成它,效果会非常好。您不希望类之间有高耦合。

此外,片段应该能够自行获取数据并向用户输出一些内容,但这在很大程度上取决于您的实现以及您正在处理的复杂程度。

我建议通过例子来学习。特别是来自 Android 官方文档的表单示例。他们应该做对了:)

编辑

只需确保在片段导航时始终使用回调即可。就像您从片段中选择一个列表项并且您想在另一个片段中查看详细信息一样。

以下代码来自官方文档http://developer.android.com/training/basics/fragments/index.html

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    // This makes sure that the container activity has implemented
    // the callback interface. If not, it throws an exception.
    try {
        mCallback = (OnHeadlineSelectedListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement OnHeadlineSelectedListener");
    }
}
Run Code Online (Sandbox Code Playgroud)

片段之间也可以直接通信,但上述解决方案更优雅且易于维护。