2010-04-21 5 views
64

यदि आपके पास एंड्रॉइड activity में Spinner ऑब्जेक्ट का कोई संभाल है, तो क्या आप प्रोग्रामर रूप से स्पिनर विकल्पों को खोल सकते हैं - जिससे उपयोगकर्ता को विकल्प चुनने के लिए मजबूर किया जा सकता है, भले ही वे spinner पर क्लिक न करें?Android ऐप में प्रोग्रामर रूप से स्पिनर खोलने के लिए संभव है?

+0

क्या यू स्पिनर वस्तु मतलब है, यू के नकली स्क्रीनशॉट साझा कर सकते हैं का उपयोग यू क्या – the100rabh

उत्तर

110

स्पिनर खोलने के लिए आपको बस इसे performClick() विधि पर कॉल करने की आवश्यकता है।

ध्यान रखें कि आप केवल इस विधि को यूआई थ्रेड से कॉल कर सकते हैं। यदि आपको स्पिनर को एक अलग थ्रेड से खोलने की आवश्यकता है तो आपको 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 पाया जा सकता है।

+0

धन्यवाद करना चाहते हैं। performClick() वह था जिसे मैं ढूंढ रहा था। मुझे स्पिनर पर उस विधि को देखना चाहिए था, लेकिन मेरे अंत में कुछ भ्रम के कारण इसे याद किया। आपका बहुत बहुत धन्यवाद! – JohnRock

+0

क्या होगा यदि मैंने अलग-अलग धागे से प्रदर्शन क्लिक का उपयोग करने के लिए runOnUIThread का उपयोग किया। – Relsell

+0

5.0.2 से पहले काम किया गया, 5.0.2 (केवल कुछ उपकरणों के लिए) पर टूटा हुआ प्रतीत होता है, लेकिन 5.1 पर फिर से काम कर रहा है ... –

11

पिछले उदाहरण में 2 रननेबल क्यों हैं?

यह पर्याप्त नहीं होगा:

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

मुझे लगता है कि यह एक अलग धागे से काम करने वाले हैंडलर को दिखाने के लिए सिर्फ एक डेमो है। –

14

Spinner आइटम आप बस इसे performClick() विधि है कॉल करने की आवश्यकता दिखाने के लिए।

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

बस इस

yourspinner.performClick(); 
संबंधित मुद्दे