【问题标题】:Can you give extras to a Fragment on replace?您可以在替换时为 Fragment 提供额外内容吗?
【发布时间】:2011-12-05 09:55:09
【问题描述】:

我目前有一个严重依赖Intents 的应用程序以及在开始活动之前提供给他们的附加功能。在调用 web 服务时使用 extras,该服务反过来提供需要显示的内容

我正在尝试将该模型转换为在我的屏幕底部有一个静态Fragment(我们称之为播放器)和另一个Fragment(我们称之为内容)上方的模型,它将显示主要内容。通过选择主屏幕上的选项,其他内容将通过替换内容Fragment 来显示。

但是,这些新的Fragments 目前是严重依赖附加功能的Intents。 有没有办法将Fragment 替换为新的,但仍然可以添加额外内容?

如果是这样,假设我有以下代码:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_holder, new MusicAlbumList(), "albumlist");
        ft.commit();

如何将附加内容添加到 MusicAlbumList?

如果这不可能,我将如何在我的新 Fragment 因缺少基本数据而强制关闭之前将当前通过 extras 传递的数据获取到我的新 Fragment 中?

【问题讨论】:

    标签: android android-fragments android-intent extras


    【解决方案1】:

    或者你可以这样做

    MusicAlbumList fragment = new MusicAlbumList();
    Bundle args = new Bundle();
    args.putString("StringName","Value here");
    fragment.setArguments(args);
    

    然后做你的替换东西。然后在片段 onStart 或 onCreate 中调用 this.getArguments(); 来拉取捆绑包,然后从那里取出你的额外内容。

    【讨论】:

      【解决方案2】:

      将 MusicAlbumList 的构造函数从默认构造函数更改为带有参数的一个,例如 new MusicAlbumList(int arg1, ...) 并通过构造函数传递您要设置的值

      【讨论】:

      • 这是我的第一个想法。猜想我将不得不将所有类重写为 Fragments(目前使用 FragmentActivities)
      • 我已经成功地使用了上面提到的方法
      • 其实不建议这样做。正确的方法是提供一个参数包。问题是,如果您的片段从内存中删除并重新构建,则不会调用此构造函数,并且您很难追踪错误。
      猜你喜欢
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多