Если у вас есть дескриптор объекта Spinner в Android Activity, можете ли вы программно открыть опции Spinner - тем самым вынуждая пользователя выбирать параметр, даже если он сам не нажимал на Spinner
?
Можно ли программно открыть Spinner в приложении Android?
Ответ 1
Чтобы открыть Spinner, вам просто нужно вызвать метод performClick().
Имейте в виду, что вы можете вызывать этот метод только из потока пользовательского интерфейса. Если вам нужно открыть Spinner из отдельного потока, вы должны создать Handler в потоке пользовательского интерфейса, а затем, со своего второго потока, отправьте запускаемый объект, который вызывает обработчик executeClick().
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 HANDLER
h.postDelayed(new Runnable() {
public void run() {
// Open the Spinner...
s.performClick();
}
}, 5000);
}
}).start();
}
}
Ресурсы, используемые в этом примере, можно найти здесь.
Ответ 2
Чтобы показать элементы Spinner
, вам просто нужно вызвать его performClick()
.
Spinner spDeviceType = (Spinner) findViewById(R.id.spDeviceType);
spDeviceType.performClick();
Ответ 3
Вам не нужно использовать 2 runnables, как показано в предыдущем примере.
Этого будет достаточно:
h.postDelayed(new Runnable() {
public void run() {
s.performClick();
}
}, 5000);
Ответ 4
Просто используйте это
yourspinner.performClick();