Si tiene un identificador para un objeto Spinner en una actividad de Android, ¿puede abrir mediante programación las opciones del spinner, obligando así al usuario a elegir una opción aunque no haya hecho clic en Spinnerellos mismos?
89

performClick()puede que no sea suficiente, si recibe elUnable to add windowerror, vea qué hacer aquí .Respuestas:
Para abrir el Spinner, solo necesita llamar a su método performClick () .
Tenga en cuenta que solo puede llamar a este método desde el hilo de la interfaz de usuario. Si necesita abrir Spinner desde un hilo separado, debe crear un Handler en el hilo de la interfaz de usuario y luego, desde su segundo hilo, enviar un objeto ejecutable que llame a performClick () al Handler.
package com.example.SpinnerDemo; import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.os.Handler; public class SpinnerDemo extends Activity { private Handler h; private Spinner s; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); h = new Handler(); s = (Spinner) findViewById(R.id.spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.planets, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); s.setAdapter(adapter); // Open the Spinner... s.performClick(); // Spawn a thread that triggers the Spinner to open after 5 seconds... new Thread(new Runnable() { public void run() { // DO NOT ATTEMPT TO DIRECTLY UPDATE THE UI HERE, IT WON'T WORK! // YOU MUST POST THE WORK TO THE UI THREAD'S HANDLER h.postDelayed(new Runnable() { public void run() { // Open the Spinner... s.performClick(); } }, 5000); } }).start(); } }Los recursos utilizados por este ejemplo se pueden encontrar aquí .
fuente
Para mostrar los
Spinnerelementos, solo necesita llamar a superformClick()método.fuente
No es necesario utilizar 2 ejecutables como se muestra en el ejemplo anterior.
Con esto bastará:
h.postDelayed(new Runnable() { public void run() { s.performClick(); } }, 5000);fuente
Simplemente usa esto
yourspinner.performClick();fuente