Có thể mở Spinner theo chương trình trong ứng dụng Android không?


88

Nếu bạn có một tay cầm đối tượng Spinner trong Hoạt động của Android, bạn có thể lập trình mở các tùy chọn spinner - do đó buộc người dùng chọn một tùy chọn mặc dù họ không nhấp vào Spinnerchính họ không?


điều gì làm u có nghĩa là bởi đối tượng spinner, u có thể chia sẻ ảnh chụp màn hình giả về những gì u muốn làm
the100rabh

performClick()có thể là không đủ, nếu bạn gặp Unable to add windowlỗi, hãy xem những việc cần làm tại đây .
Protean

Câu trả lời:


143

Để mở Spinner, bạn chỉ cần gọi nó là phương thức performanceClick () .

Hãy nhớ rằng bạn chỉ có thể gọi phương thức này từ chuỗi giao diện người dùng. Nếu bạn cần mở Spinner từ một luồng riêng biệt, bạn nên tạo một Trình xử trong luồng giao diện người dùng và sau đó, từ luồng thứ hai của bạn, gửi một đối tượng có thể chạy được gọi là PerformClick () tới Trình xử lý.

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

Các tài nguyên được sử dụng bởi ví dụ này có thể được tìm thấy ở đây .


Cảm ơn. performanceClick () là những gì tôi đang tìm kiếm. Tôi lẽ ra đã thấy phương pháp đó trên máy quay nhưng đã bỏ lỡ nó do một số nhầm lẫn ở cuối tôi. Cảm ơn rất nhiều!
JohnRock

Điều gì sẽ xảy ra nếu tôi sử dụng runOnUIThread để sử dụng thực hiện nhấp chuột từ chuỗi khác.
Relsell

Làm việc trước 5.0.2, dường như bị phá vỡ trên 5.0.2 (chỉ dành cho một số thiết bị), nhưng hoạt động trở lại trên 5.1 ...
Benjamin Piette

24

Để hiển thị các Spinnermục bạn chỉ cần gọi nó là performClick()phương thức.

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

16

Bạn không cần phải sử dụng 2 runnables như trong ví dụ trước.

Điều này sẽ là đủ:

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

3
Tôi nghĩ rằng đó chỉ là một bản demo để hiển thị trình xử lý làm việc từ một luồng riêng biệt.
Mark Renouf

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.