這個問題似乎很明顯,但我無法弄清楚。我有一個自定義 LanguageSpinner 類:
class LanguageSpinner(context: Context, attrs: AttributeSet) : AppCompatSpinner(context, attrs) {
override fun getSelectedItem(): LanguageSpinnerItem {
return super.getSelectedItem() as LanguageSpinnerItem
}
fun getSelectedLanguage() : Language {
return selectedItem.language
}
override fun setAdapter(languageSpinnerAdapter: LanguageSpinnerAdapter) {
this.adapter = languageSpinnerAdapter // ?
}
override fun getAdapter(): LanguageSpinnerAdapter {
return super.getAdapter() // ?
}
}
我需要確保該getSelectedItem()方法將回傳一個 Language 類物件。所以我的配接器必須是LanguageSpinnerAdapter. 如何覆寫配接器的 getter 和 setter 以接收此精確自定義配接器的實體?至于現在,它說 setter 什么都不覆寫。我明白,這是因為 LanguageSpinnerAdapter 不是 SpinnerAdapter,但我已經在我的自定義配接器中實作了它。那么我能做什么呢?我的自定義配接器類:
class LanguageSpinnerAdapter(
context: Context, private val languageItems : ArrayList<LanguageSpinnerItem>
) : ArrayAdapter<LanguageSpinnerItem>(context, R.layout.spinner_item, languageItems),
SpinnerAdapter {
...
}
uj5u.com熱心網友回復:
這有幫助嗎?
class LanguageSpinner(context: Context, attrs: AttributeSet) : AppCompatSpinner(context, attrs) {
override fun setAdapter(languageSpinnerAdapter: SpinnerAdapter) {
super.setAdapter((languageSpinnerAdapter as? LanguageSpinnerAdapter) ?: return)
}
override fun getAdapter(): SpinnerAdapter? {
return super.getAdapter() as? LanguageSpinnerAdapter
}
}
我更喜歡這種做空安全的方式,但也有人使用 let
(languageSpinnerAdapter as? LanguageSpinnerAdapter)?.let {
super.setAdapter(it)
}
順便說一句,您必須使用 SpinningAdapter 否則您將無法匹配基本方法。這會導致“方法覆寫任何內容”錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/418639.html
標籤:
上一篇:.resumeWith(Result.failure(...))和.resumeWithException之間的區別
