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

use*_*_6v 5 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
Run Code Online (Sandbox Code Playgroud)

错误信息是:

    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
Run Code Online (Sandbox Code Playgroud)

如何解决?

cha*_*l03 2

中有两种addAll方法ArrayAdapter

  1. ArrayAdapter.addAll(T ... items)
  2. public void addAll(@NonNull Collection<? extends T> collection)

所以编译器无法推断出你想调用哪一个方法,因为Any有点像ObjectJava。

而不是: val list = Collections.emptyList<Any>()使用val list = Collections.emptyList<String>().

并更改ArrayAdapter<Any>ArrayAdapter<String>

错误应该得到解决。

希望能帮助到你。