프로그래밍 방식으로 Android 앱에서 Spinner를 열 수 있나요?


88

Android 활동에서 Spinner 개체에 대한 핸들이있는 경우 프로그래밍 방식으로 spinner 옵션을 열어 사용자가 Spinner자신을 클릭하지 않았더라도 옵션을 선택하도록 할 수 있습니까?


회 전자 개체가 무엇을 의미합니까, u 원하는 작업의 모의 스크린 샷을 공유 할 수
있습니까

performClick()충분하지 않을 수 있습니다. Unable to add window오류가 발생하면 여기 에서 수행 할 작업을 참조 하십시오 .
Protean

답변:


143

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();
    }
}

이 예제에서 사용하는 리소스는 여기 에서 찾을 수 있습니다 .


감사. performClick ()은 내가 찾던 것이었다. 나는 스피너에서 그 방법을 보았어야했지만 내 쪽에서 약간의 혼란으로 인해 놓쳤습니다. 감사합니다!
JohnRock 2010-04-22

다른 스레드에서 클릭 수행을 위해 runOnUIThread를 사용하면 어떻게됩니까?
Relsell 2012

5.0.2 전에 근무, (일부 장치에 대한) 5.0.2에 깨진 것 같다,하지만 5.1에서 다시 작동
벤자민 Piette에

24

Spinner항목 을 표시하려면 performClick()메서드 를 호출하면 됩니다.

Spinner spDeviceType = (Spinner) findViewById(R.id.spDeviceType);
spDeviceType.performClick();

16

이전 예제에 표시된대로 2 개의 실행 파일을 사용할 필요가 없습니다.

이것으로 충분합니다.

h.postDelayed(new Runnable() {
    public void run() {
        s.performClick();
    }
}, 5000);

3
별도의 스레드에서 작동하는 핸들러를 보여주는 데모 일 뿐이라고 생각합니다.
Mark Renouf 2012

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.