प्रोग्राम को एंड्रॉइड ऐप में स्पिनर खोलने के लिए संभव है?


88

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


स्पिनर ऑब्जेक्ट द्वारा यू का क्या मतलब है, क्या आप यू के लिए स्क्रीनशॉट का मॉक स्क्रीनशॉट साझा कर सकते हैं
— 100rabh

performClick()पर्याप्त नहीं हो सकता है, यदि आपको Unable to add windowत्रुटि मिलती है , तो यहां देखें कि क्या करना है ।
— प्रोटीएन

जवाबों:


143

स्पिनर को खोलने के लिए आपको बस इसे कॉल करने की जरूरत है, प्रदर्शन () विधि।

ध्यान रखें कि आप केवल UI थ्रेड से इस पद्धति को कॉल कर सकते हैं। यदि आपको स्पिनर को एक अलग थ्रेड से खोलने की आवश्यकता है, तो आपको UI थ्रेड में एक हैंडलर बनाना चाहिए और फिर, अपने दूसरे थ्रेड से, एक रन करने योग्य ऑब्जेक्ट भेजें जो हैंडलर को 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();
    }
}

इस उदाहरण द्वारा उपयोग किए गए संसाधन यहां पाए जा सकते हैं ।


धन्यवाद। PerformClick () वही था जिसकी मुझे तलाश थी। मुझे उस विधि को स्पिनर पर देखना चाहिए था लेकिन अपने अंत पर कुछ भ्रम के कारण वह चूक गया। आपका बहुत बहुत धन्यवाद!
— जॉनरॉक

क्या होगा अगर मैं रन थ्रेड यूआईट्र्रेड का उपयोग विभिन्न थ्रेड से प्रदर्शन क्लिक के लिए करता हूं।
— Relsell

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

24

उन Spinnerवस्तुओं को दिखाने के लिए जिन्हें आपको कॉल करने की आवश्यकता है, यह performClick()विधि है।

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

16

जैसा कि पिछले उदाहरण में दिखाया गया है, आपको 2 रनवे का उपयोग करने की आवश्यकता नहीं है।

यह पर्याप्त होगा:

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

3
मुझे लगता है कि हैंडलर को एक अलग थ्रेड से काम करना सिर्फ एक डेमो है।
— मार्क रेनॉफ

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.