Se hai un handle per un oggetto Spinner in un'attività Android, puoi aprire in modo programmatico le opzioni di spinner, costringendo così l'utente a scegliere un'opzione anche se non ha fatto clic su Spinnerse stesso?
Se hai un handle per un oggetto Spinner in un'attività Android, puoi aprire in modo programmatico le opzioni di spinner, costringendo così l'utente a scegliere un'opzione anche se non ha fatto clic su Spinnerse stesso?
Risposte:
Per aprire lo Spinner devi solo chiamare il suo metodo performClick () .
Tieni presente che puoi chiamare questo metodo solo dal thread dell'interfaccia utente. Se è necessario aprire lo Spinner da un thread separato, è necessario creare un gestore nel thread dell'interfaccia utente e quindi, dal secondo thread, inviare un oggetto eseguibile che chiama performClick () al gestore.
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();
}
}
Le risorse utilizzate da questo esempio possono essere trovate qui .
Non è necessario utilizzare 2 eseguibili come mostrato nell'esempio precedente.
Questo sarà sufficiente:
h.postDelayed(new Runnable() {
public void run() {
s.performClick();
}
}, 5000);
Usa semplicemente questo
yourspinner.performClick();