У меня есть счетчик в android, который отображает языковые объекты. Я использую Realm в качестве базы данных, поэтому эти объекты выглядят так:
open class Language(
@PrimaryKey
var languageCode : String = "",
var isoLanguageName : String = ""
) : RealmObject() {
override fun toString(): String {
return isoLanguageName
}
}
Я хочу, чтобы счетчик отображал languageCode выбранного значения, но когда я открываю раскрывающийся список, должен отображаться isoLanguageNames.
Вот мой адаптер:
class LanguageAdapter(
val context: Context?,
data: RealmResults<Language>
) : RealmBaseAdapter<Language>(data), SpinnerAdapter {
private class ViewHolder {
lateinit var lang : TextView
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var view = convertView
var viewHolder: ViewHolder
if(view == null){
view = LayoutInflater.from(context).inflate(R.layout.item_language, parent, false)
viewHolder = ViewHolder()
viewHolder.lang = view.findViewById(R.id.item_language_name)
view.tag = viewHolder
} else {
viewHolder = convertView?.tag as ViewHolder
}
if(adapterData != null){
val lang = adapterData!![position]
viewHolder.lang.text = lang.languageCode
}
return view!!
}
}
Я попробовал подход, упомянутый в этом ответе. Но это не работает, по крайней мере, не с RealmBaseAdapter, поскольку отображаемое значение всегда будет тем, что я назначу здесь:
viewHolder.lang.text = lang.languageCode
Так что, в отличие от ответа, адаптер не принимает toString ( ) значение по умолчанию для раскрывающегося списка и значение, назначенное в getView () для отображаемого значения, но просто принимает назначенное значение в getView () для обоих.
Кто-нибудь знает, как выполнить sh что я хочу сделать?