我有一个非常简单的列表(因此没有必要创建一个扩展BaseAdapter的自定义适配器)。我使用ArrayApdater来实现它。
当我想更改适配器的值时,有一个构建错误说有两个allAll方法,kotlin不知道使用哪个。
以下是示例代码:
val list = Collections.emptyList<Any>() // Just for sample.
val adapter = ArrayAdapter<Any>(this, android.R.layout.simple_spinner_item, list) // This line is OK
// Some work later
adapter.clear()
adapter.addAll(list) // Here's the error
错误消息是:
Error:(79, 35) Overload resolution ambiguity:
public open fun addAll(p0: (MutableCollection<out Any!>..Collection<Any!>?)): Unit defined in android.widget.ArrayAdapter
public open fun addAll(vararg p0: Any!): Unit defined in android.widget.ArrayAdapter
如何解决?
答案 0 :(得分:2)
您应该使用String
代替Any
您的代码应该是这样的。
val list = Collections.emptyList<String>() // Just for sample.
val adapter = ArrayAdapter<String>(activity, R.layout.simple_spinner_item, list) // This line is OK
// Some work later
adapter.clear()
adapter.addAll()
答案 1 :(得分:1)
addAll
中有两种ArrayAdapter
方法:
ArrayAdapter.addAll(T ... items)
public void addAll(@NonNull Collection<? extends T> collection)
。因此编译器无法推断您要调用哪一个方法,因为Any
有点像Java中的Object
。
而不是:
val list = Collections.emptyList<Any>()
使用val list = Collections.emptyList<String>()
。
将ArrayAdapter<Any>
更改为ArrayAdapter<String>
应该解决错误。
希望它有所帮助。
答案 2 :(得分:0)
添加扩展方法:
inline fun <T> ArrayAdapter<T>.addAllCollection(c: Collection<T>) = this.addAll(c)
调用扩展方法可以绕过此限制:
adapter.addAllCollection(list)