2010-04-21 12 views

Antwort

110

Um den Spinner zu öffnen, müssen Sie nur seine performClick() Methode aufrufen.

Beachten Sie, dass Sie diese Methode nur über den UI-Thread aufrufen können. Wenn Sie den Spinner aus einem separaten Thread öffnen müssen, sollten Sie im UI-Thread eine Handler erstellen und dann aus Ihrem zweiten Thread ein ausführbares Objekt senden, das performClick() an den Handler aufruft.

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

Die Ressourcen, die von diesem Beispiel verwendet wird, kann here finden.

+0

Dank tun wollen. performClick() war was ich gesucht habe. Ich hätte diese Methode auf dem Spinner sehen sollen, aber wegen einiger Verwirrung an meinem Ende verpasst. Danke vielmals! – JohnRock

+0

Was passiert, wenn ich runOnUIThread für die Verwendung von "Ausführen" verwendet habe, klicken Sie auf einen anderen Thread. – Relsell

+0

Arbeitete vor 5.0.2, scheint auf 5.0.2 (nur für einige Geräte) gebrochen zu sein, aber wieder auf 5.1 ... –

11

Warum gibt es 2 Runnables im vorherigen Beispiel?

Wird es nicht genug sein:

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

Ich denke, es ist nur eine Demo, um den Handler von einem separaten Thread arbeiten zu zeigen. –

14

die Sie gerade Spinner Elemente anzuzeigen, benötigen performClick() Methode ist es zu nennen.

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

einfach nutzen diese

yourspinner.performClick(); 
Verwandte Themen