2017-08-14 171 views
3

我有一個非常簡單的列表(所以沒有必要創建一個擴展BaseAdapter的自定義適配器)。我使用ArrayApdater來實現這一點。如何調用Kotlin中的ArrayAdapter.addAll方法?

當我想更改適配器的值時,出現構建錯誤,說有兩個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 

如何解決呢?

回答

1

有兩種addAll方法ArrayAdapter

  1. ArrayAdapter.addAll(T ... items)
  2. 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>

錯誤應該可以解決。

希望它有幫助。

+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() 
+0

非常感謝!這非常有幫助! –