java - 在 Fragment 的 onAttach(Activity) 中存储 Activity

标签 java android android-fragments

我想在fragment中调用Activity的一些功能。为了方便起见,我计划将 onAttach(Activity activity) 中传递的 Activity 存储为 Fragment 类成员。

我知道 getActivity() 也可以做同样的工作。我是 Android 的新手,想知道这是否是不好的做法。一些代码喜欢:

class MyFragment extends Fragment {
    private MyActivity mActivity;

    public void onAttach (Activity activity){
        super.onAttach(activity);
        mActivity = (MyActivity) activity;
    }
}

如果我应该这样做,请指教。请让我知道这种方法的缺点。

最佳答案

正如您提到的,由于 getActivity() 可以完成相同的工作,我认为将 MyActivity 存储为 Fragment 的私有(private)成员并不是一个好的做法。

有一些原因:

  1. Fragment 旨在制作灵活的 UI,并且可以在两者之间共享 不同的 Activity 。硬编码 Activity 类会损害 可重用性。

  2. 如果以后要调用一些 Activity 函数,可以定义一个包含所有必要函数的接口(interface)MyInterface。然后 使 MyActivity 实现 MyInterface 并存储 MyInterface 作为 fragment 成员,就像 Android 教程一样: http://developer.android.com/guide/components/fragments.html

  3. 更重要的是,Android的fragment实现包含FragmentActivity mActivity,所以重复的mActivity定义可能 造成潜在的问题。只需检查: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/support/v4/app/Fragment.java#Fragment

关于java - 在 Fragment 的 onAttach(Activity) 中存储 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31698594/

相关文章:

java - 能够在 Java 8 lambda 表达式中有效使用最终变量有什么好处

PE (.exe) 周围的 Java 包装器

java - 如何在 Java 中访问嵌套的 HashMap?

android - 为什么迁移到 android bundle 后用户数据变大了?

android - 如何重用一个 fragment

java - 将对象传递给 fragment Activity 并从 fragment 写入对象的正确方法

java - 将新 fragment 添加到 FrameLayout 会产生 IllegalStateException

java - 按层次结构对类进行排序的树

android - Gradle依赖项在自定义测试文件夹中不可用

android - 主题 : Theme dependent drawable?