Si vous avez un handle vers un objet Spinner dans une activité Android, pouvez-vous ouvrir les options de spinner par programmation - obligeant ainsi l'utilisateur à choisir une option même s'il n'a pas cliqué dessus Spinner?
Si vous avez un handle vers un objet Spinner dans une activité Android, pouvez-vous ouvrir les options de spinner par programmation - obligeant ainsi l'utilisateur à choisir une option même s'il n'a pas cliqué dessus Spinner?
Réponses:
Pour ouvrir le Spinner, il vous suffit d'appeler sa méthode performClick () .
Gardez à l'esprit 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 distinct, vous devez créer un gestionnaire dans le thread d'interface utilisateur, puis, à partir de votre deuxième thread, envoyer un objet exécutable qui appelle performClick () au 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 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();
}
}
Les ressources utilisées par cet exemple peuvent être trouvées ici .
Vous n'avez pas besoin d'utiliser 2 exécutables comme indiqué dans l'exemple précédent.
Cela suffira:
h.postDelayed(new Runnable() {
public void run() {
s.performClick();
}
}, 5000);
Utilisez simplement ceci
yourspinner.performClick();