Можно ли программно открыть Spinner в приложении для Android?
89
Если у вас есть дескриптор объекта Spinner в действии Android, можете ли вы программно открыть параметры счетчика - тем самым вынуждая пользователя выбрать вариант, даже если он не нажимал на Spinnerсебя?
Что вы имеете в виду под объектом spinner, можете ли вы поделиться макетными скриншотами того, что вы хотите сделать
the100rabh
performClick()может быть недостаточно, если вы получите сообщение об Unable to add windowошибке, посмотрите, что делать здесь .
Protean
Ответы:
143
Чтобы открыть Spinner, вам просто нужно вызвать его метод performClick () .
Имейте в виду, что вы можете вызывать этот метод только из потока пользовательского интерфейса. Если вам нужно открыть Spinner из отдельного потока, вы должны создать обработчик в потоке пользовательского интерфейса, а затем из второго потока отправить запускаемый объект, который вызывает performClick () обработчику.
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();
}
}
Ресурсы, использованные в этом примере, можно найти здесь .
Спасибо. PerformClick () - это то, что я искал. Я должен был увидеть этот метод на спиннере, но пропустил его из-за некоторой путаницы с моей стороны. Большое спасибо!
JohnRock
Что, если бы я использовал runOnUIThread для выполнения щелчка из другого потока.
Relsell
Работал до 5.0.2, похоже, не работает на 5.0.2 (только для некоторых устройств), но снова работает на 5.1 ...
Бенджамин Пьетте,
24
Чтобы показать Spinnerэлементы, вам просто нужно вызвать его performClick()метод.
performClick()
может быть недостаточно, если вы получите сообщение обUnable to add window
ошибке, посмотрите, что делать здесь .Ответы:
Чтобы открыть Spinner, вам просто нужно вызвать его метод performClick () .
Имейте в виду, что вы можете вызывать этот метод только из потока пользовательского интерфейса. Если вам нужно открыть Spinner из отдельного потока, вы должны создать обработчик в потоке пользовательского интерфейса, а затем из второго потока отправить запускаемый объект, который вызывает performClick () обработчику.
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(); } }
Ресурсы, использованные в этом примере, можно найти здесь .
источник
Чтобы показать
Spinner
элементы, вам просто нужно вызвать егоperformClick()
метод.источник
Вам не нужно использовать 2 исполняемых файла, как показано в предыдущем примере.
Этого будет достаточно:
h.postDelayed(new Runnable() { public void run() { s.performClick(); } }, 5000);
источник
Просто используйте это
yourspinner.performClick();
источник