Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Androide spinner evento de incendio cuando la misma selección de artículo se hace

Quiero disparar un evento cuando se selecciona el mismo elemento en la ruleta. Método

@Override public void onItemSelected(AdapterView<?> parent, View arg1, int position, long arg3) { } 

Se llama sólo cuando se realiza una selección diferente. Mi Propósito es mostrar un brindis cuando se selecciona cualquier elemento o se vuelve a seleccionar el mismo elemento o se realiza una selección diferente.

 @Override public void onNothingSelected(AdapterView<?> parent) { } 

El método anterior no resuelve mi problema.

  • Android: Cree el hilador de forma programática desde el array
  • Actualizar los elementos de la ruleta en función del elemento seleccionado de otra ruleta
  • Populating Spinner de la base de datos SQLite Android
  • Obtener el valor String de un Spinner respaldado por CursorAdapter de la consulta SQL en Android
  • Set onClickListener para el elemento spinner?
  • Android Spinner - Cómo seleccionar la lista predeterminada a ninguna
  • Refrescar un Spinner
  • Caught a RuntimeException de la implementación de stub de enlace cuando intercambia datos en arrayadapter
  • 5 Solutions collect form web for “Androide spinner evento de incendio cuando la misma selección de artículo se hace”

    Utilice el oyente del tecleo para satisfacer su requisito. Como el oyente directo del tecleo en el hilandero no apoyado hace tan que una clase extiende el hilador y sobre paseo en método del tecleo y en este método haga lo que usted desea hacer.

    He encontrado que la selección vieja se mantiene en la variable llamada mOldSelectedPosition en la jerarquía del hilandero. Spinner está utilizando este valor para comprobar si el mismo elemento seleccionado o no, y si es el mismo, ignora. Si no queremos ignorar esto Lo que hice es un poco de código sucio con la reflexión.

     package com.aradiom.amc.nativecomponents; import java.lang.reflect.Field; import android.content.Context; import android.util.Log; import android.widget.Spinner; public class SpinnerTrigger extends Spinner { public SpinnerTrigger(Context context) { super(context); // TODO Auto-generated constructor stub } @Override public void setSelection(int position, boolean animate) { ignoreOldSelectionByReflection(); super.setSelection(position, animate); } private void ignoreOldSelectionByReflection() { try { Class<?> c = this.getClass().getSuperclass().getSuperclass().getSuperclass(); Field reqField = c.getDeclaredField("mOldSelectedPosition"); reqField.setAccessible(true); reqField.setInt(this, -1); } catch (Exception e) { Log.d("Exception Private", "ex", e); // TODO: handle exception } } @Override public void setSelection(int position) { ignoreOldSelectionByReflection(); super.setSelection(position); } } 

    Esta clase siempre invalidará el valor de la selección antigua, de modo que cada vez que se haga clic en el evento se dispare. Puede que no sea una solución perfecta. Use con precaución. 🙂

    Esperemos que esta ayuda. Lo intenté y funciona

     /** Spinner extension that calls onItemSelected even when the selection is the same as its previous value */ public class NDSpinner extends Spinner { public NDSpinner(Context context) { super(context); } public NDSpinner(Context context, AttributeSet attrs) { super(context, attrs); } public NDSpinner(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void setSelection(int position, boolean animate) { boolean sameSelected = position == getSelectedItemPosition(); super.setSelection(position, animate); if (sameSelected) { // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId()); } } @Override public void setSelection(int position) { boolean sameSelected = position == getSelectedItemPosition(); super.setSelection(position); if (sameSelected) { // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId()); } } } 

    Dado que mi reputación no es lo suficientemente alta como para comentar directamente en la respuesta de @Suat, he intentado ese método, funciona como un encanto, pero no estoy claro cuáles podrían ser los efectos secundarios. Algo que quiero agregar es, los constructores adicionales se deben agregar para evitar errores.

     public SpinnerTrigger(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public SpinnerTrigger(Context context, AttributeSet attrs){ super(context,attrs); 

    }

    Puede agregar un nombre de método en su elemento seleccionado MÉTODO

     Spinner `Spinner1`=(Spinner)findViewById(R.id.`declareid`) 

    OBject ha sido declarado para spinner

      @Override public void onItemSelected(AdapterView<?> parent, View arg1, int position, long arg3) { ItemOnChange(); } private void ItemOnChange() { if(Spinner1.getSelectedItemPosition()>0){ pd=ProgressDialog.show(this,"","Loading, Please wait .. ",true); final int spinner=Spinner1.getSelectedItemPosition(); final Handler ThreadCallback=new Handler(); final Runnable runInCityThread=new Runnable(){ public void run(){ fnBindspimmer2(); pd.dismiss(); } }; new Thread(){ @Override public void run(){ Spinner2values(); ThreadCallback.post(runInCityThread); } }.start(); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.