Можно ли программно открыть Spinner в приложении Android?

Если у вас есть дескриптор объекта Spinner в Android Activity, можете ли вы программно открыть опции Spinner - тем самым вынуждая пользователя выбирать параметр, даже если он сам не нажимал на Spinner?

Ответ 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();