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

14

我正在使用Action Bar和Fragment构建选项卡界面。需要帮助将数据从容器活动发送到片段。

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

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

任何帮助都将不胜感激。

谢谢。


1
你有查看过 http://developer.android.com/training/basics/fragments/communicating.html 吗? - sandrstar
@sandrstar 在我的回答中也包含了你发布的链接。 - LonWolf
可能是重复的问题:Android:如何让Fragment获取Activity的全局变量 - Shirish Herwade
2个回答

50

在你的Activity中编写一个方法,例如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()访问对象。 - user1829067
@Maid786 发布你的代码。我假设你将片段添加到了多个活动中。然后,你将父活动强制转换为错误的类型。让所有的活动都实现一些接口,例如 IParentActivity,并将你的 getActivity 结果强制转换为它。 - Artem Zelinskiy
它返回一个单一的对象。我应该如何为多个对象实现它? - Machado
@Machado 只需将返回类型更改为 Bundle 或 List<?>。 - Artem Zelinskiy

2
有多种方法可以实现这一点。
  1. 创建一个静态变量来保存数据,并从片段内部访问该数据-这是最快的方法,但如果使用不当会创建不良设计模式。
  2. 一种通过父活动实现片段与片段之间通信的方法在此处发布:http://developer.android.com/training/basics/fragments/communicating.html您可以使用示例代码仅进行活动-片段数据发送
  3. 在这里投票最高的答案:Accessing instance of the parent activity?提到了避免使用静态数据的方法(1.),并包含使用ActivityGroup的源代码示例

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

选择哪种方法取决于您的个人喜好,这只是几个选项!
编辑:我不确定第3种方法是否适用于片段,因为我没有测试过类似于它的方法,该示例是活动 - 活动通信。

谢谢。我使用Greensy建议的替代方案。如果卡住了,我会尝试你的建议。 - user1829067

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接