Как вызвать метод ArrayAdapter.addAll в Котлине?

У меня очень простой список (поэтому нет необходимости создавать пользовательский адаптер, который расширяет 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 

Как его решить?

В addAll есть два метода ArrayAdapter :

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

поэтому компилятор не может определить, какой именно метод вы хотите вызвать, потому что Any похож на Object в Java.

Вместо: val list = Collections.emptyList<Any>() использовать val list = Collections.emptyList<String>() .

И измените ArrayAdapter<Any> на ArrayAdapter<String>

Ошибка должна быть разрешена.

Надеюсь, поможет.

Вы должны использовать 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()