可以在Android应用程序中以编程方式打开Spinner吗?

vd8tlhqk  于 2022-12-31  发布在  Android
关注(0)|答案(6)|浏览(178)

如果您在Android Activity中拥有Spinner对象的句柄,是否可以通过编程方式弹出微调选项,从而强制用户选择一个选项,即使他们自己没有点击Spinner

u59ebvdq

u59ebvdq1#

要打开Spinner,只需调用它的performClick()方法。
请记住,您只能从UI线程调用此方法。如果需要从单独的线程打开Spinner,则应在UI线程中创建一个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();
    }
}

此示例使用的资源可以在here中找到。

eqfvzcg8

eqfvzcg82#

要显示Spinner项,只需调用它的performClick()方法。

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

f5emj3cl3#

您不需要使用2个runnables,如上一个示例所示。
这就足够了:

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

yvfmudvl4#

用这个就行了

yourspinner.performClick();
stszievb

stszievb5#

@Override
protected void onResume() {
 super.onResume();
 _spinner_operations.performClick();
}

您需要onResume中的调用,但在onCreate中此调用不起作用。

js81xvg6

js81xvg66#

可以在UI线程完成其当前操作后调用performClick()。如果不使用post {},则可能看不到Spinner打开。

findViewById<Spinner>(R.id.spinner).post {
    performClick()
}

相关问题