Possibilité d’ouvrir par programme une application Spinner dans Android?

Si vous avez un handle vers un object Spinner dans une activity Android, pouvez-vous ouvrir par programme les options de spinner – forçant ainsi l’utilisateur à choisir une option même s’il n’a pas cliqué sur le spinner même?

Pour ouvrir le Spinner, il vous suffit d’appeler la méthode performClick () .

N’oubliez pas que vous ne pouvez appeler cette méthode qu’à partir du thread d’interface utilisateur. Si vous devez ouvrir le Spinner à partir d’un thread séparé, vous devez créer un gestionnaire dans le thread d’interface utilisateur puis, à partir de votre deuxième thread, envoyer un object exécutable qui appelle performClick () pour le gestionnaire.

 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 sortingggers 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(); } } 

Les ressources utilisées par cet exemple peuvent être trouvées ici .

Pour afficher les éléments Spinner , il vous suffit d’appeler la méthode performClick() .

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

Pourquoi il y a 2 runnables dans l’exemple précédent?

Ne sera-t-il pas suffisant:

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

simplement utiliser ceci

 yourspinner.performClick();