No se puede establecer OnItemClickListener for spinner en Android

En un RecyclerView.Adapter<CustomAdapter.ViewHolder> personalizado RecyclerView.Adapter<CustomAdapter.ViewHolder> , configuré un adaptador para un spinner y descubrí que el valor de mi spinner no cambia después de la selección, así que traté de agregar un OnItemClickListener en mi spinner:

 override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) { // The selectable items of the spinner is dynamically generated from getItems() function val selectableItems: List<String> = getItems() val spinnerAdapter = ArrayAdapter<String>(this.context, androi.R.layout.simple_spinner_item) spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) spinnerAdapter.addAll(selectableItems) viewHolder.mySpinner.adapter = spinnerAdapter // the error occurs on the following line: viewHolder.mySpinner.onItemClickListener = AdapterView.OnItemClickListener { adapterView, view, i, l -> adapterView.setSelection(i) } viewHolder.mySpinner.setSelection(origionSelectedPosition) } 

No recibí ninguna advertencia o error durante la compilation, sin embargo, durante el time de ejecución, recibí una RuntimeException que decía que setOnItemClickListener cannot be used with a spinner . Es un poco extraño ¿Hice algo mal en mi código? ¿O alguien sabe por qué mi spinner no cambió con la selección correspondiente?

Descripción adicional de la solución de Kotlin:

Alguna vez traté de usar onItemSelectedListener pero no onItemSelectedListener encontrar una forma adecuada de usarlo en kotlin. ¡Pero finalmente! El siguiente código resolvió mi problema:

  viewHolder.mySpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(parent: AdapterView<*>, view: View, pos: Int, id: Long) { } override fun onNothingSelected(parent: AdapterView<out Adapter>?) { } } 

Use setOnItemSelectedListener lugar de onItemClickListener .

 viewHolder.mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { } @Override public void onNothingSelected(AdapterView<?> parent) { } }); 

Siguiendo la respuesta de sasikumar, lo resolví en kotlin con el siguiente código:

 viewHolder.mySpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(parent: AdapterView<*>, view: View, pos: Int, id: Long) { } override fun onNothingSelected(parent: AdapterView<out Adapter>?) { } } 

Primero inicializa el spinner en la function onCreate.

  var spinner : Spinner ?= null spinner = findViewById(R.id.spinner) as Spinner 

Ahora agrega detalles con Spinner. Aquí he usado array desde el recurso de cadena.

  fun addSpinnerData(){ var arr = (resources.getStringArray(R.array.data_list).toMutableList()); adapter = ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, arr) spinner!!.setAdapter(adapter); spinner!!.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{ override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { Toast.makeText(applicationContext," On Click",Toast.LENGTH_SHORT).show(); } override fun onNothingSelected(p0: AdapterView<*>?) { } } } 

De esta forma puedes lograr onItemSelectedListener para Spinner

Puede crear una function de extensión muy simple:

file: Extensions.kt

 fun Spinner.setOnItemSelectedListener(listener: AdapterView.OnItemSelectedListener) { onItemSelectedListener = listener } 

Entonces puedes llamarlo de la manera que quieras

 spinner.setOnItemSelectedListener(object: AdapterView.OnItemSelectedListener { override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { } override fun onNothingSelected(parent: AdapterView<*>?) { } }) 

Similar a las respuestas anteriores, pero se parece más a la versión original en lugar de la tarea

  • ¿Es posible usar Mockito en Kotlin?
  • cómo ejecutar un file de class comstackdo en Kotlin?
  • ¿Puedo usar Kotlin con Codename One?
  • La desconnection no funciona en la aplicación Spring Boot (no es compatible con el método POST)
  • Compile Groovy y Kotlin?
  • Kotlin NumberFormatException
  • Fuel, Kotlin, Gson, se esperaba BEGIN_ARRAY pero era BEGIN_OBJECT en la línea 1
  • ¿Por qué este val, no es val?
  • Problema con el método de extensión en el script de Kotlin
  • Usar interfaces funcionales con types de funciones en Kotlin
  • ¿Cuál es la diferencia entre find y firstOrNull?