2010-04-21 13 views

Respuesta

110

Para abrir el Spinner solo necesita llamar al 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 el Spinner desde un subproceso separado, debe crear un Handler en el subproceso de interfaz de usuario y luego, desde su segundo subproceso, enviar un objeto ejecutable que invoca performClick() al Manejador.

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 here.

+0

Gracias. performClick() era lo que estaba buscando. Debería haber visto ese método en la ruleta, pero lo perdí debido a cierta confusión en mi extremo. ¡Muchas gracias! – JohnRock

+0

¿Qué sucede si utilizo runOnUIThread para utilizar el hacer clic en un tema diferente? – Relsell

+0

Funcionó antes de 5.0.2, parece estar roto en 5.0.2 (solo para algunos dispositivos), pero funciona de nuevo en 5.1 ... –

11

¿Por qué hay 2 ejecutables en el ejemplo anterior?

¿no será suficiente:

h.postDelayed(new Runnable() { 
    public void run() { 
     s.performClick(); 
    } 
}, 5000); 
+2

Creo que es solo una demostración para mostrar al manejador trabajando desde un hilo separado. –

14

Para mostrar los elementos Spinner sólo tiene que llamar es performClick() método.

Spinner spDeviceType = (Spinner) findViewById(R.id.spDeviceType); 
spDeviceType.performClick(); 
5

simplemente utilizar este

yourspinner.performClick(); 
Cuestiones relacionadas