【问题标题】:Pass data from Activity to Fragment on finish完成时将数据从 Activity 传递到 Fragment
【发布时间】:2015-06-23 19:48:45
【问题描述】:

我有一个从片段开始活动的场景。在活动中,我必须将一些数据发送回片段。为此,我使用 startActivityForResult(intent, requestCode) 从 Fragment 启动 Activity,然后在 onActivityResult() 中捕获结果。

虽然这段代码对我来说运行良好,但问题是我正在使用SceneTransitionAnimationImageView 从 Fragment 动画化到 Activity。这需要将一个包从 Fragment 传递到 Activity。问题是startActivityForResult()在Fragments中只取了两个参数,所以动画就断了。

所以,我想问一下如何确保在保持动画正常工作的同时从 Activity 获取数据?有没有其他方法可以将数据从 Activity 发送到 Fragment?

P.S- 我可以使用SharedPreferences 并将数据保存在Activity 中,完成它,然后在Fragment 的onResume() 中从SharedPreferences 中读取数据。但是,我想避免使用它。

更新:-

// This is the shared view
final ImageView imageView = (ImageView) view.findViewById(R.id.ivProperty);
final Intent intent = new Intent(getActivity(), PropertyDetailsScreen.class);
final View sharedView = imageView;
final String transitionName = getString(R.string.square_blue_name);
// This is the animation
final ActivityOptionsCompat transitionActivityOptions = ActivityOptionsCompat
                    .makeSceneTransitionAnimation(getActivity(), sharedView, transitionName);
// Getting bundle from the animation
final Bundle bundle = transitionActivityOptions.toBundle();
// Starting the activity with animation
getActivity().startActivity(intent, bundle);

【问题讨论】:

  • 在activity和fragment中使用setResult(),在onResume()方法中访问
  • 我已经在使用它了。我已经指定了,但它破坏了动画,因为我无法将 bundle 作为第三个参数传递。我希望这一切都能奏效,我能够部分实现。
  • 比使用 sharedpreference 或广播接收器
  • 将该数据变量设为静态并在 onResume() 中获取值
  • @ShoebSiddique static 不应以这种方式使用,因为在某些情况下它可能会变为 null 并引入错误。所以,我一般会避免它。

标签: android android-fragments android-animation


【解决方案1】:

这需要从 Fragment 向 Activity 传递一个 bundle。问题是startActivityForResult()在Fragments中只取了两个参数

即使您使用的是startActivityForResult,您也可以将捆绑包传递给下一个活动

    Intent intent = new Intent(NextActivity.class, this);
    Bundle bundle = new Bundle();
    ...
    intent.putExtras(bundle);
    startActivityForResult(intent, REQUEST_CODE);

【讨论】:

  • 我已经尝试过了,但在这种情况下动画不起作用。该捆绑包不是普通捆绑包,而是SceneTransitionAnimation 的捆绑包,当以这种方式传递时它不起作用。
  • 您能否发布代码在startActivityForResultstartActivity 的情况下如何设置SceneTransitionAnimation 包?
  • 你现在可以看看更新问题吗?在这种情况下,我的动画运行正常,但我无法取回数据。此外,将getActivity()startActivityForResult() 一起使用意味着结果将出现在Activity 而不是Fragment
【解决方案2】:

使用 getter,setter 方法。在活动中设置数据并在片段中获取该数据。

【讨论】:

  • 创建一个自定义类,在该类中定义变量的类型,然后为这些变量生成getter、setter方法。使用该类的对象来访问这些方法
  • 如何将该类的对象从 Activity 传递到片段?
  • 借助从活动到片段的意图创建自定义类可序列化和对象。
  • @Rohan kandwal 如果您对答案满意,请勾选。
  • 我会等着看是否有更突出的答案来,如果没有,会标记你的答案。
【解决方案3】:

使用 ActivityCompat 你可以达到同样的效果,as mentioned here in documentation 提到我们可以在 startActivityForResult 中传递捆绑包。

【讨论】:

  • 我知道,但它对 Fragment 有什么帮助?
  • 好像..应该
猜你喜欢
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多