如何在Kotlin中调用ArrayAdapter.addAll方法?

时间:2017-08-14 10:37:12

标签: android kotlin

我有一个非常简单的列表(因此没有必要创建一个扩展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

如何解决?

3 个答案:

答案 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方法:

  1. ArrayAdapter.addAll(T ... items)
  2. public void addAll(@NonNull Collection<? extends T> collection)
  3. 因此编译器无法推断您要调用哪一个方法,因为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)