Android:使用 putExtra 从片段访问容器活动对象?

Posted

技术标签:

【中文标题】Android:使用 putExtra 从片段访问容器活动对象?【英文标题】:Android : Accessing container activity object from fragment using putExtra? 【发布时间】:2012-11-25 10:08:12 【问题描述】:

我正在使用操作栏和片段构建一个选项卡界面。在将数据从容器活动发送到片段时,我需要帮助。

详细说明,我在容器活动中有工作对象。我根据工作对象中的信息(如公司详细信息、经验详细信息等)创建了几个选项卡。我需要将作业对象传递给这些片段,以便它可以显示相应的信息。

我已经创建了容器活动和标签片段。我需要一个关于如何在它们之间传递对象的示例。我不能使用intent.putExtra。我可以从片段访问父容器的对象吗?

任何帮助将不胜感激。

谢谢。

【问题讨论】:

你检查过developer.android.com/training/basics/fragments/… 吗? @sandrstar 包含了您也在我的回答中发布的链接。 Android: how can fragment take a global variable of Activity的可能重复 【参考方案1】:

在您的活动中创建方法,例如 getJob 将返回 Job 对象及其信息

MyActivity extends Activity
Job mJob;

public Job getJob()
   return this.mJob;
 

然后在您的 Fragment 中执行以下操作:

MyFragment extends Fragment

@Override
public void onActivityCreated()
  super.onActivityCreated();
  ((MyActivity)this.getActivity()).getJob();
 

使用getActivity和方法getJob();获取对象

【讨论】:

非常感谢。我可以使用 getActivity() 访问该对象。 @Maid786 发布您的代码。我假设您将片段添加到不止一个活动。然后你将父活动类型转换为错误的类型。让您的所有活动都实现一些界面。 IParentActivity 并将您的 getActivity 结果类型转换为它 它返回一个对象。我应该如何为多个对象实现这个? @Machado 只需将返回类型更改为 Bundle 或 List>【参考方案2】:

有多种方法可以实现这一点。

    创建一个static 变量来保存您的数据并从片段内部访问该数据 - 这是最快的,但如果使用不当会产生不良的设计模式。 Fragment-to-Fragment communication possible through the parent Activity 的一种方式贴在这里:http://developer.android.com/training/basics/fragments/communicating.html 你可以使用示例代码来做一个Activity - Fragment data send。 投票最高的答案在这里:Accessing instance of the parent activity? 提到a way to avoid using static data (1.) 并包含使用ActivityGroup 的源代码示例

"如果您需要访问您的第一个活动中的某些值,而无需 对其进行静态引用,您可以考虑将您的 ActivityGroup 中的活动。”

您选择的是您的喜好,这些只是几个选项!


编辑:我不确定数字 3 是否适用于片段,因为我还没有测试过类似的方法,例如 Activity - Activity 通信。

【讨论】:

谢谢。我正在使用 Greensy 建议的替代方法。如果我被卡住了,我会尝试你的建议。

以上是关于Android:使用 putExtra 从片段访问容器活动对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从一个活动传递到android中的另一个活动片段? [复制]

如何使用 Kotlin 从 Android 中的片段访问另一个片段?

Android - 片段的 onActivityResult() 中的 NPE

使用Android导航组件时如何从后台获取片段?

从 Android 上的 Qt 应用程序通过(显式)意图调用外部活动 - putExtra 不起作用

从适配器访问片段