Skip to content

Instantly share code, notes, and snippets.

@Farbklex
Created January 22, 2020 14:14
Show Gist options
  • Save Farbklex/2d560e10f3deb61722ef85ca6a6242b6 to your computer and use it in GitHub Desktop.
Save Farbklex/2d560e10f3deb61722ef85ca6a6242b6 to your computer and use it in GitHub Desktop.
Custom ArrayAdapter for Spinner Views in Android
package me.a_hoffmann.exampleapp
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.TextView
import me.a_hoffmann.exampleapp.R
/**
* ArrayAdapter which shows values for a custom Model [MyModel]. Makes it easy to show a certain value in a Spinner
* and get a different return value for it.
*/
class CustomArrayAdapter(context: Context, resource: Int, var items: List<MyModel>)
: ArrayAdapter<CustomArrayAdapter.MyModel>(context, resource, items) {
val inflater: LayoutInflater = LayoutInflater.from(context)
// Custom for this adapter. It's only here as an example
data class MyModel(val id: Int, val name: String)
// If required, get the ID from your Model. If your desired return value can't be converted to long use getItem(int) instead
override fun getItemId(position: Int): Long {
return items[position].id.toLong()
}
override fun getView(position: Int, convertView: View, container: ViewGroup): View {
var view: View? = convertView
if (view == null) {
view = inflater.inflate(R.layout.custom_spinner_layout, container, false)
}
(view?.findViewById(android.R.id.text1) as TextView).text = getItem(position)!!.name
return view
}
override fun getDropDownView(position: Int, convertView: View, parent: ViewGroup): View {
var view: View? = convertView
if (view == null) {
view = inflater.inflate(R.layout.custom_spinner_layout, parent, false)
}
(view?.findViewById(android.R.id.text1) as TextView).text = getItem(position)!!.name
return view
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment