Android uygulamasında bir Spinner'ı programlı olarak açmak mümkün mü?


89

Bir Android Etkinliğinde Spinner nesnesi için bir tutamaçınız varsa, döndürücü seçeneklerini programlı olarak açabilir ve böylece kullanıcıyı, Spinnerkendilerine tıklamamalarına rağmen bir seçeneği seçmeye zorlayabilir misiniz?


spinner nesnesiyle ne demek istiyorsun, ne yapmak istediğine dair sahte ekran görüntülerini paylaşabilir misin
the100rabh

performClick()Yeterli olmayabilir, Unable to add windowhatayı alırsanız , burada ne yapacağınızı görün .
Protean

Yanıtlar:


146

Spinner'ı açmak için performClick () yöntemini çağırmanız yeterlidir .

Bu yöntemi yalnızca UI iş parçacığından çağırabileceğinizi unutmayın. Spinner'ı ayrı bir iş parçacığından açmanız gerekirse , UI iş parçacığında bir İşleyici oluşturmalı ve ardından ikinci iş parçacığınızdan PerformClick () öğesini İşleyiciye çağıran çalıştırılabilir bir nesne göndermelisiniz.

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

Bu örnekte kullanılan kaynaklar burada bulunabilir .


Teşekkürler. performClick () aradığım şeydi. Bu yöntemi eğiricide görmeliydim ama bazı kafa karışıklığı nedeniyle kaçırdım. Çok teşekkürler!
JohnRock

Ya runOnUIThread'i farklı iş parçacığından perform tıklama kullanmak için kullandıysam.
Relsell

5.0.2'den önce çalıştı, 5.0.2'de bozuk görünüyor (sadece bazı cihazlar için), ancak 5.1'de tekrar çalışıyor ...
Benjamin Piette

Bir iletişim kutusu kullanırken, döndürücüm performClick () kullanarak iletişim kutusunun arkasında açılır; Bunun için herhangi bir çözüm var mı?
Huzaifa Asif

26

Öğeleri göstermek için Spinnersadece performClick()yöntemini çağırmanız gerekir .

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

17

Önceki örnekte gösterildiği gibi 2 runnable kullanmanıza gerek yoktur.

Bu yeterli olacaktır:

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

3
İşleyicinin ayrı bir iş parçacığından çalıştığını göstermek için sadece bir demo olduğunu düşünüyorum.
Mark Renouf

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.