【问题标题】:Pass fragments between activities在活动之间传递片段
【发布时间】:2011-07-11 20:33:21
【问题描述】:

我想做一个可以支持纵向和横向的应用程序。布局有两个窗格,左侧是选项,右侧显示结果。选择一个选项后,右窗格会显示它。但是对于肖像没有足够的空间,因此需要单独的活动。每个选项都会产生不同类型的片段,所以当活动之间的所有变化都是在那里添加的片段时,我不想为每个选项创建一个活动。我想将主要活动中的片段传递给新活动,我该怎么做?

【问题讨论】:

    标签: android fragment


    【解决方案1】:

    编辑:移动了提问者真正想要的内容。

    如果您想在创建 Activity 时将数据传递给它,请在 startActivity() 中使用的意图上调用 Intent.putExtra() 的版本。然后,您可以使用getIntent().getStringExtra() 来(例如)在活动中获取额外的字符串。

    假设您的第一个活动中有一段名为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) 的形式访问)作为额外名称。他们建议您在其前面加上您的包名。
    • 您可以放置​​和获取多种类型的数据,从字符串到数组,甚至是可序列化的数据。

    考虑using resource qualifiers to provide alternative layouts,而不是为不同的布局方向制作单独的活动。

    总而言之,在这样的结构中制作两个布局:

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

    两个 XML 文件的名称相同。然后在一个中设置您的默认纵向布局,在另一个中设置横向版本。

    当您在 onCreate 中扩展布局时(并且当它在运行时更改布局时自动这样做时)它会为您选择正确的布局。

    【讨论】:

    • 我不想为不同的布局方向制作单独的活动,但如果您有两个窗格并且它们都不能容纳,那么您需要为第二个窗格创建一个新活动。我想将片段从一个活动传递到另一个活动。每个选项都会生成一个带有复选框和编辑文本的布局,因此没有两个选项共享相同的布局。
    • 哦,很好。通过模糊的“片段”一词,我仍然假设您的意思是您想要的任何类型的数据。我会更新我的答案。
    • Fragments 不能用这种方法放在 Extra 中,当我说 Fragments 时,我的意思是:developer.android.com/reference/android/app/Fragment.html
    • 哦,你的意思是分片课程!好吧,我想我从来没有深入研究过这样的布局细节。无视我的回答,因为我显然无法帮助你,对不起。 :( (顺便说一句,如果您将 Fragment 大写,我可能已经注意到您可能指的是某个类而没有回应……我只是认为您含糊其辞。标签“fragment”也只是说“含糊不清的术语”所以我也不知道。)再一次,真的很抱歉浪费你的时间。
    【解决方案2】:

    我想将一个片段从主要活动传递到新活动,我该怎么做?

    你不会的。最多,您会遵循@Ribose 的回答——通过额外的将标志传递到活动中,以指示要创建的片段集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 2013-06-21
      • 1970-01-01
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      相关资源
      最近更新 更多