Se você tiver um identificador para um objeto Spinner em uma atividade Android, pode abrir programaticamente as opções do spinner - forçando assim o usuário a escolher uma opção, mesmo que ele não tenha clicado em Spinner
si mesmo?
89
performClick()
pode não ser suficiente, se você obtiver oUnable to add window
erro, veja o que fazer aqui .Respostas:
Para abrir o Spinner você só precisa chamar o método performClick () .
Lembre-se de que você só pode chamar esse método a partir do thread da IU. Se você precisar abrir o Spinner de um thread separado, deve criar um Handler no thread de IU e, a partir do segundo thread, enviar um objeto executável que chama performClick () para o 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(); } }
Os recursos usados por este exemplo podem ser encontrados aqui .
fonte
Para mostrar os
Spinner
itens você só precisa chamar seuperformClick()
método.Spinner spDeviceType = (Spinner) findViewById(R.id.spDeviceType); spDeviceType.performClick();
fonte
Você não precisa usar 2 runnables, conforme mostrado no exemplo anterior.
Isso será o suficiente:
h.postDelayed(new Runnable() { public void run() { s.performClick(); } }, 5000);
fonte
Basta usar isso
yourspinner.performClick();
fonte