<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<AutoCompleteTextView
android:id="@+id/autoCompleteTv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="none"
/>
object AutoCompleteHelper {
fun <T> initializeAutoCompleteTextView(
context: Context,
autoCompleteTextView: AutoCompleteTextView,
data: List<T>,
displayFunction: (T) -> String,
onItemSelectedListener: (position: Int, selectedItem: T) -> Unit
) {
val adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, data.map(displayFunction))
autoCompleteTextView.setAdapter(adapter)
autoCompleteTextView.setOnItemClickListener { _, _, position, _ ->
val selectedItem = data[position]
onItemSelectedListener(position, selectedItem)
}
}
fun <T> setAutoCompleteSelectionByValue(
autoCompleteTextView: AutoCompleteTextView,
data: List<T>,
valueToSelect: T,
displayFunction: (T) -> String = { it.toString() }
) {
val position = data.indexOf(valueToSelect)
if (position >= 0) {
autoCompleteTextView.setText(displayFunction(data[position]), false)
}
}
fun setAutoCompleteSelectionByIndex(
autoCompleteTextView: AutoCompleteTextView,
data: List<String>,
index: Int
) {
if (index >= 0 && index < data.size) {
autoCompleteTextView.setText(data[index], false)
}
}
}
object SpinnerHelper {
fun <T> initializeSpinner(
context: Context,
spinner: Spinner,
data: List<T>,
displayFunction: (T) -> String,
onItemSelectedListener: (position: Int, selectedItem: T, view: View?, id: Long) -> Unit
) {
val adapter = ArrayAdapter(context, android.R.layout.simple_spinner_item, data.map(displayFunction))
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = adapter
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
val selectedItem = data[position]
onItemSelectedListener(position, selectedItem, view, id)
}
override fun onNothingSelected(parent: AdapterView<*>?) {
// No action needed here
}
}
}
fun <T> setSpinnerSelectionByValue(
spinner: Spinner,
data: List<T>,
valueToSelect: T
) {
val position = data.indexOf(valueToSelect)
if (position >= 0) {
spinner.setSelection(position)
}
}
fun setSpinnerSelectionByIndex(spinner: Spinner, index: Int) {
if (index >= 0 && index < spinner.adapter.count) {
spinner.setSelection(index)
}
}
}
Comments
Post a Comment