【问题标题】:What is meant by "Activity this fragment is currently associated with"?“此片段当前关联的活动”是什么意思?
【发布时间】:2017-03-12 00:40:20
【问题描述】:

doc 中,我看到当我从片段类中调用 getActivity() 时,我得到了片段当前关联的活动对象。

假设如果片段与 MainActivity 相关联,那么 getActivity() 不会给出 MainActivity 类的对象。

我无法理解Activity activity;Activity activity = getActivity(); 之间的区别 谁能解释一下这个“返回这个片段当前关联的活动”到底是什么意思?

很抱歉提出简单的问题。 谢谢。

编辑:

也经历过this,更了解了。

【问题讨论】:

  • “谁能解释一下这个“返回这个片段当前关联的活动”到底是什么意思? -- 表示其FragmentManager 正在管理片段的活动(如果有)。例如,如果您通过FragmentTransactionFragment 添加到FragmentManager,则认为Fragment 与您使用的FragmentManager 的活动相关联。

标签: android android-fragments android-activity


【解决方案1】:

联想很简单。

就像在现实生活中一样。

  • 您是学生(片段)。
  • 您正在芝加哥大学学习知识 (MainActivity)。

作为学生,您将与大学联系(附加)。

如果有人问你:

-你的大学是什么?(从 Fragment 调用 getActivity()

你会回答:

-我来自芝加哥大学(返回引用 MainActivity 的对象

如果你改变了大学 - 你会做出不同的反应。 就是这样:)

【讨论】:

  • 其实我确实喜欢这个答案:)
【解决方案2】:

最简单的答案是:

“返回此片段当前关联的 Activity” 是添加此片段的活动。

然后把事情说清楚。

Activity activity;

这会创建对活动对象的引用,并且在开始时这个是空的(等于 null),直到您向它写入一些活动对象。

Activity activity = getActivity();

这里我们做了两件事,首先我们创建对活动对象的引用,然后我们将函数 getActivity() 写入这个对象的值,如果从片段调用将返回关联的活动。

最后为什么这不是 MainActivity?那么它实际上可能是也可能不是。 :) 并检查这是否真的是 MainActivity 试试这个:)

Activity activity = getActivity(); // let get our activity
if (activity == null) { 
    /* this mean we are not attached to activity, possibly, fragment was not shown yet */ 
} 
if (activity instanceof MainActivity) { // we check if activity is actually Main activity.
    MainActivity mainActivity = (MainActivity) activity; // and if it is we can do something with it after we cast it.
}

最后我将添加一个可能也有帮助的链接:fragment

【讨论】:

  • 嗨,Inverce!,感谢您的解释。 :) 我想再问一个,如果你不介意的话。你说“它实际上可能是也可能不是”。你能告诉我它依赖于什么,它实际上可能成为 MainActivity 本身的一个实例吗?
  • Fragment 不是 Activity 的一部分,也不是 Fragment 的一部分,相反,Fragment 是一段 ui,您可以在多个活动中多次使用,MainActivity 恰好是 AndroidStudio/Eclipse 自动生成的活动创建一个项目,它的默认活动将在开始时显示,您可以将其他活动添加到您的项目中,并且您可以向每个活动添加您的片段。然后对于添加片段的每个实例,您获得的活动实际上就是您添加该片段的活动,所以...第 2 部分即将推出...
  • 如果我创建另一个 Activity 让我们称之为 SmileyActivity 并将我的片段添加到它,methodGetActivity 将返回该 SmileyActivity 的确切实例,如果我将我的片段添加到 MainActivity 和每个添加的片段的 SmileyActivity 中,方法 getActivity 将返回正确的 Activity :) developer.android.com/reference/android/app/Fragment.html
  • 如果我碰巧回答了你的问题,请接受我的回答:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 2011-10-11
  • 2020-11-25
相关资源
最近更新 更多