Created
December 9, 2017 14:21
-
-
Save IEnoobong/b5b097ad21a31db604284ddbfc50e0e4 to your computer and use it in GitHub Desktop.
A better way
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class CustomArrayAdapter(context: Context, | |
@LayoutRes private val layoutResource: Int, | |
@IdRes private val textViewResourceId: Int = 0, | |
private val values: List<ModelDisplayName>) : ArrayAdapter<ModelDisplayName>(context, layoutResource, values) { | |
override fun getItem(position: Int): ModelDisplayName = values[position] | |
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { | |
val view = createViewFromResource(convertView, parent, layoutResource) | |
return bindData(getItem(position), view) | |
} | |
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View { | |
val view = createViewFromResource(convertView, parent, android.R.layout.simple_spinner_dropdown_item) | |
return bindData(getItem(position), view) | |
} | |
private fun createViewFromResource(convertView: View?, parent: ViewGroup, layoutResource: Int): TextView { | |
val context = parent.context | |
val view = convertView ?: LayoutInflater.from(context).inflate(layoutResource, parent, false) | |
return try { | |
if (textViewResourceId == 0) view as TextView | |
else { | |
view.findViewById(textViewResourceId) ?: | |
throw RuntimeException("Failed to find view with ID " + | |
"${context.resources.getResourceName(textViewResourceId)} in item layout") | |
} | |
} catch (ex: ClassCastException){ | |
Log.e("CustomArrayAdapter", "You must supply a resource ID for a TextView") | |
throw IllegalStateException( | |
"ArrayAdapter requires the resource ID to be a TextView", ex) | |
} | |
} | |
private fun bindData(value: ModelDisplayName, view: TextView): TextView { | |
view.text = value.displayName | |
return view | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment