如果您在安卓活动中有一个对 Spinner 对象的处理,那么是否可以通过编程方式弹出 Spinner 选项,从而强制用户选择选项即使他们没有点击 Spinner?
要打开Spinner,您只需要调用其performClick()方法。
请记住,您只能从UI线程调用此方法。如果您需要从单独的线程打开Spinner,则应在UI线程中创建Handler,然后从第二个线程发送一个可运行对象到Handler,该可运行对象调用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 spDeviceType = (Spinner) findViewById(R.id.spDeviceType);
spDeviceType.performClick();
你不需要像之前的示例一样使用两个runnable。
这就足够了:
h.postDelayed(new Runnable() {
public void run() {
s.performClick();
}
}, 5000);
只需使用此功能
yourspinner.performClick();
@Override
protected void onResume() {
super.onResume();
_spinner_operations.performClick();
}
你需要在onResume中调用,在onCreate中这样不起作用。
在 UI 线程完成其当前操作后,您可以调用 performClick()
。如果您不使用 post {}
,则可能无法看到 Spinner 打开。
findViewById<Spinner>(R.id.spinner).post {
performClick()
}
Unable to add window
错误,那么仅仅使用performClick()
可能不够。请查看这里中的解决方法。 - Protean