fun newInstance(message: String?): DialogFragment {
return DialogFragment().apply {
arguments = Bundle().apply {
putString("arg", message)
}
}
}
消息指出,apply()
函数中的 this
引用指向自 API 21 以来可用的 BaseBundle
类,该类将崩溃较低的 API。 Bundle#putString(key, value)低版本肯定有,但是Android Studio 3.0-alpha8有错误。
引用 Bundle
类型而不是 BaseBundle
。
为什么我们首先会出现 Lint 错误?
最佳答案
真的像个bug是known bug但是如果查看 Bundle.java 源代码,您实际上可以明白为什么会收到警告。
在 api 21 Bundle
之前有一个方法 (check here)
public void putString(@Nullable String key, @Nullable String value)
并且该类本身没有父类(super class)。从 api 21 Bundle
扩展了一个新添加的 BaseBundle
类,这个方法 putString
是 moved到 BaseBundle
。所以,当你在 api 21 及以上调用方法时,该方法属于 BaseBundle
,对于较低版本它属于 Bundle
。
这在某种程度上与 apply
block 有关,因为如果您直接在 Bundle
类型的变量上调用该方法,则不会出现警告。
关于android - Android Studio 3.0-alpha8 中的 Kotlin apply() 扩展 lint 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45415947/