Czy można programowo otworzyć Spinner w aplikacji na Androida?
89
Jeśli masz uchwyt do obiektu Spinner w działaniu Androida, czy możesz programowo otworzyć opcje pokrętła - w ten sposób zmuszając użytkownika do wybrania opcji, mimo że sam nie Spinnerkliknął?
Pamiętaj, że możesz wywołać tę metodę tylko z wątku interfejsu użytkownika. Jeśli chcesz otworzyć Spinner z osobnego wątku, powinieneś utworzyć Handler w wątku UI, a następnie, z drugiego wątku, wysłać uruchamialny obiekt, który wywołuje performClick () do Handler.
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();
}
}
Zasoby używane w tym przykładzie można znaleźć tutaj .
Dzięki. PerformClick () było tym, czego szukałem. Powinienem był zobaczyć tę metodę na przędzarce, ale przegapiłem ją z powodu pewnego zamieszania na moim końcu. Wielkie dzięki!
JohnRock
A co, jeśli użyję runOnUIThread do użycia funkcji perform click z innego wątku.
Relsell
Działał przed 5.0.2, wydaje się być zepsuty w 5.0.2 (tylko dla niektórych urządzeń), ale działa ponownie na 5.1 ...
Benjamin Piette
24
Aby wyświetlić Spinnerelementy, wystarczy wywołać jego performClick()metodę.
performClick()
może nie wystarczyć, jeśliUnable to add window
pojawi się błąd, zobacz, co robić tutaj .Odpowiedzi:
Aby otworzyć Spinner, wystarczy wywołać jego metodę performClick () .
Pamiętaj, że możesz wywołać tę metodę tylko z wątku interfejsu użytkownika. Jeśli chcesz otworzyć Spinner z osobnego wątku, powinieneś utworzyć Handler w wątku UI, a następnie, z drugiego wątku, wysłać uruchamialny obiekt, który wywołuje performClick () do Handler.
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(); } }
Zasoby używane w tym przykładzie można znaleźć tutaj .
źródło
Aby wyświetlić
Spinner
elementy, wystarczy wywołać jegoperformClick()
metodę.źródło
Nie musisz używać 2 elementów wykonawczych, jak pokazano w poprzednim przykładzie.
To wystarczy:
h.postDelayed(new Runnable() { public void run() { s.performClick(); } }, 5000);
źródło
Po prostu użyj tego
yourspinner.performClick();
źródło