Android 활동에서 Spinner 개체에 대한 핸들이있는 경우 프로그래밍 방식으로 spinner 옵션을 열어 사용자가 Spinner자신을 클릭하지 않았더라도 옵션을 선택하도록 할 수 있습니까?
답변:
Spinner를 열려면 performClick () 메서드 를 호출하기 만하면 됩니다.
이 메서드는 UI 스레드에서만 호출 할 수 있습니다. 별도의 스레드에서 Spinner를 열어야하는 경우 UI 스레드에서 Handler 를 만든 다음 두 번째 스레드에서 performClick ()을 호출하는 실행 가능한 개체를 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();
}
}
이전 예제에 표시된대로 2 개의 실행 파일을 사용할 필요가 없습니다.
이것으로 충분합니다.
h.postDelayed(new Runnable() {
public void run() {
s.performClick();
}
}, 5000);