将可空值从 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);
我还想传递可为空的 Float
s 和 Integer
s,但相应的 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
floats
和 ints
也可以这样做。
【讨论】:
以上是关于将可空值从 Activity 传递到 Fragment的主要内容,如果未能解决你的问题,请参考以下文章
如何将值从基本适配器传递到 Android 中的 Activity
在 Kotlin 中将值从 Activity 传递到 Fragment