将可空值从 Activity 传递到 Fragment

Posted

技术标签:

【中文标题】将可空值从 Activity 传递到 Fragment【英文标题】:Passing Nullable Values from Activity to Fragment 【发布时间】:2016-11-12 02:52:17 【问题描述】:

当将Strings 从一个活动传递到一个片段时,使用

Bundle args = new Bundle();
args.putString(key, value);
fragment.setArguments(args);

我也可以通过潜在的null 并在片段中接收它

String string = getArguments().getString(key);

我还想传递可为空的 Floats 和 Integers,但相应的 putInt()putFloat() 方法不允许传递 null。我现在将其他标志作为参数传递,以指示是否设置了一个值,但相比之下这似乎相当笨拙。是否有更好的方法来传递潜在的 null 值(最好在 API 级别 14 及更高版本中提供)?

【问题讨论】:

【参考方案1】:

我更喜欢跳过将 null 的情况放入包中。 在片段中只需检查Bundle.containsKey(String key),如果不意味着null

【讨论】:

好点。这保存了标志。 get... 方法实际上执行此检查并允许定义一个当然不能为空的默认值。但这有效。谢谢。【参考方案2】:

这是@Eugene Krivenjas 文本解决方案的 Kotlin 版本 - 以防万一有人喜欢复制/粘贴而不是思考;)

private fun Bundle.putLongOrSkip(key: String?, value: Long?) =
    apply  value?.let  putLong(key, value)  

private fun Bundle.getLongOrNull(key: String?) = 
    if (containsKey(key)) getLong(key) else null

floatsints 也可以这样做。

【讨论】:

以上是关于将可空值从 Activity 传递到 Fragment的主要内容,如果未能解决你的问题,请参考以下文章

如何将空值传递给 WebAPI 中的可空类型

如何将值从基本适配器传递到 Android 中的 Activity

在 Kotlin 中将值从 Activity 传递到 Fragment

如何将值从列表视图传递到 detalis Activity

android ListView 将隐藏值从一个 Activity 传递到另一个

C# winforms:将可空类型绑定到其他属性(不是文本)时出错