Possibilité d'ouvrir par programme un Spinner dans une application Android?
89
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?
que voulez-vous dire par objet spinner, pouvez-vous partager des captures d'écran simulées de ce que vous voulez faire
the100rabh
performClick()peut ne pas suffire, si vous obtenez l' Unable to add windowerreur, voyez ce qu'il faut faire ici .
Protean
Réponses:
143
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;
publicclassSpinnerDemoextendsActivity{
private Handler h;
private Spinner s;
@OverridepublicvoidonCreate(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() {
publicvoidrun(){
// 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() {
publicvoidrun(){
// Open the Spinner...
s.performClick();
}
}, 5000);
}
}).start();
}
}
Les ressources utilisées par cet exemple peuvent être trouvées ici .
Merci. performClick () était ce que je recherchais. J'aurais dû voir cette méthode sur le spinner mais je l'ai ratée en raison d'une certaine confusion de mon côté. Merci beaucoup!
JohnRock
Et si j'utilisais runOnUIThread pour utiliser perform click à partir d'un thread différent.
Relsell
Travaillé avant 5.0.2, semble être cassé sur 5.0.2 (uniquement pour certains appareils), mais travaille à nouveau sur 5.1 ...
Benjamin Piette
24
Pour afficher les Spinneréléments, il vous suffit d'appeler sa performClick()méthode.
performClick()
peut ne pas suffire, si vous obtenez l'Unable to add window
erreur, voyez ce qu'il faut faire ici .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 .
la source
Pour afficher les
Spinner
éléments, il vous suffit d'appeler saperformClick()
méthode.la source
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);
la source
Utilisez simplement ceci
yourspinner.performClick();
la source