Cerrar Spinner en clic fuera de Spinner

Quiero cerrar una ruleta Android una vez que haga clic fuera del Spinner. ¿Eso es posible?

3 Solutions collect form web for “Cerrar Spinner en clic fuera de Spinner”

He tenido algo de suerte con esto, incluso si no funciona completamente.

La vista del obturador del adaptador giratorio:

public View getView(int position, View v, ViewGroup parent) { if (v == null) { LayoutInflater mLayoutInflater = mActivity.getLayoutInflater(); v = mLayoutInflater.inflate(R.layout.user_row, null); } View tempParent = (View) parent.getParent().getParent().getParent(); tempParent.setOnTouchListener(new MyOnTouchListener(mActivity)); mActivity.setOpen(true); User getUser = mUsers.get(position); return v; } 

El oyente de ontouch:

 public class MyOnTouchListener implements OnTouchListener{ private MyActivity mOverall; public MyTouchListener(MyActivity overall) { mOverall = overall; } public boolean onTouch(View v, MotionEvent event) { if (mOverall.getOpen()) { mOverall.getWindow().setContentView(R.layout.main); //reset your activity screen mOverall.initMainLayout(); //reset any code. most likely what's in your oncreate } return false; } } 

El oyente seleccionado del elemento seleccionado:

 public class MySelectedListener implements OnItemSelectedListener { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { setUser(pos); //or whatever you want to do when the item is selected setOpen(false); } public void onNothingSelected(AdapterView<?> parent) {} } 

La actividad

Su actividad con el spinner debe tener una variable global mOpen con los métodos get y set. Esto es porque el oyente de ontouch tiende para permanecer encendido incluso después de la lista se cierra.

Las limitaciones de este método:

Se cierra si se toca entre la hiladora y las opciones o al lado de las opciones. Tocar por encima de la hiladora y por debajo de las opciones todavía no se cierra.

Tratar

 @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) v.setVisibility(View.GONE); } 

Yo quería ser capaz de determinar cuando el menú de hilandero se muestra, y despedido también. Después de un montón de búsqueda, no había un montón de buenas soluciones. Yo era capaz de lograr esto haciendo lo siguiente:

  1. Se creó una clase de hiladora personalizada y se anula el siguiente método:

     @Override public boolean performClick() { this.isDropDownMenuShown = true; //Flag to indicate the spinner menu is shown return super.performClick(); } 
  2. En mi actividad, anule el método onWindowFocusChanged (boolean hasFocus). Si hasFocus == true && la bandera en # 1 está establecida en true, entonces el spinner ha sido descartado (puede ser por selección o tapping fuera del spinner).

     @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (actionBarSpinner.isDropdownShown() && hasFocus) { actionBarSpinner.setDropdownShown(false); //Do you work here } 

    }

¡Buena suerte!

  • Rellene Spinner del origen de matriz de cadena, con un String ArrayAdapter
  • Android: Selección de spinner alineada a la izquierda
  • Cómo configurar el color de texto de los elementos en Spinner Android
  • Establecer clave y valor en el hilador
  • Android.database.sqlite.SQLiteCursor@435b9ba0
  • Android hiladora ABIERTA con un solo clic de botón
  • Configuración del Adaptador del Spinner de Android en el hilador
  • ¿Cómo crearía un Spinner para su uso como elemento de acción?
  • Android: Cree el hilador de forma programática desde el array
  • AppCompatSpinner vs android.widget.Spinner para la aplicación con min SDK versión 14
  • Diferencia entre android.R.layout.simple_spinner_dropdown_item y android.R.layout.simple_spinner_item
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.