在活动之间传递片段

7
我想要制作一个可以支持竖屏和横屏的应用程序。布局有两个窗格,左侧是选项,右侧显示结果。当选择一个选项时,右侧窗格会显示该选项。但在竖屏模式下空间不足,因此需要一个单独的活动。每个选项都产生不同类型的片段,因此我不想为每个选项制作一个活动,而所有活动之间的区别仅在于添加了哪个片段。我希望从主活动传递一个片段到新的活动中,我该怎么做?
2个回答

6
如果您想在创建 Activity 时将数据传递给它,可以在用于 startActivity() 的 intent 上调用 Intent.putExtra() 的某个版本。然后,在活动中可以使用 getIntent().getStringExtra()(例如)获取字符串 extra。
假设您的第一个 Activity 中有一个名为 myString 的字符串数据。
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra(EXTRA_NAME_CONSTANT, myString);
startActivity(intent);

现在,在你的新活动中的onCreate方法中,你需要这样做:

String myString = this.getIntent()
        .getStringExtra(EXTRA_NAME_CONSTANT, "default return value here");

一些注意事项:

  • 对于EXTRA_NAME_CONSTANT,我确实是指制作一个形如"your.package.name.SomeString"的字符串常量,例如"com.example.MyString"。个人甚至建议使用资源(以getString(R.string.extra_my_string)的形式访问)来命名extra的名称。他们建议您在包名称前加上前缀。
  • 您可以从字符串到数组甚至可序列化的数据中获取和放置许多类型的数据。

不要为不同的布局方向创建单独的活动,而是考虑使用资源限定符提供替代布局

总之,按以下结构制作两个布局:

/res/layout/yourlayout.xml
/res/layout-land/yourlayout.xml

当两个XML文件的名称相同时,可以在其中一个文件中创建默认的竖屏布局,在另一个文件中创建横屏版本。

当您在onCreate中填充布局时(以及在运行时自动进行布局更改时),它会为您选择正确的布局。


我不想为不同的布局方向创建单独的活动,但如果你有两个窗格都无法适应,那么你需要为第二个窗格创建一个新的活动。我想要将片段从一个活动传递到另一个活动。每个选项都会生成一个带有复选框和编辑文本的布局,因此没有两个选项共享相同的布局。 - Hank
哦,好的。根据模糊的词语“碎片”,我仍然认为您指的是任何类型的数据。我会更新我的答案。 - Ribose
片段无法使用此方法放置在Extra中,而当我说片段时,我的意思是:http://developer.android.com/reference/android/app/Fragment.html - Hank
哦,你是指Fragment这个类!我想我从未深入研究过布局的具体细节。请忽略我的回答,显然我无法帮助你,很抱歉。:( (顺便说一句,如果你将Fragment大写,我可能会注意到你可能在引用某个类而不是回复...我只是觉得你含糊其辞。此外,“fragment”标签只是说“模糊术语”,所以这也没有给我提示。)再次非常抱歉浪费了你的时间。 - Ribose

5
我想把主活动中的一个片段传递到新的活动中,我该怎么做?
你不需要这样做。最多,你可以按照 @Ribose 的答案 - 通过额外的标记将一个片段传递到活动中,以指示创建哪组片段。

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