অ্যানড্রয়েড অ্যাপে প্রোগ্রামিকভাবে কোনও স্পিনার খোলার সম্ভব?


89

যদি আপনার অ্যান্ড্রয়েড ক্রিয়াকলাপের কোনও স্পিনার আইনের কাছে একটি হ্যান্ডেল থাকে , আপনি কি প্রোগ্রামিকভাবে স্পিনার বিকল্পগুলি পপ করতে পারেন - এর ফলে ব্যবহারকারীকে Spinnerনিজের উপর ক্লিক না করেও কোনও বিকল্প বেছে নিতে বাধ্য করতে হবে?


স্পিনার অবজেক্ট বলতে কী বোঝাতে চেয়েছেন, আপনি যা করতে চান তার মক স্ক্রিনশটগুলি ভাগ করে নিতে পারেন
100rabh

performClick()যথেষ্ট নাও হতে পারে, আপনি যদি Unable to add windowত্রুটি পান তবে এখানে কী করবেন তা দেখুন ।
প্রোটিয়ান

উত্তর:


146

স্পিনারটি খোলার জন্য আপনাকে কেবল এটি সম্পাদন ক্লিক () পদ্ধতি বলা উচিত।

মনে রাখবেন যে আপনি কেবল এই পদ্ধতিটি ইউআই থ্রেড থেকে কল করতে পারেন। আপনার যদি আলাদা থ্রেড থেকে স্পিনারটি খোলার প্রয়োজন হয় তবে আপনার ইউআই থ্রেডে একটি হ্যান্ডলার তৈরি করা উচিত এবং তারপরে আপনার দ্বিতীয় থ্রেড থেকে একটি চালানোযোগ্য বস্তু প্রেরণ করুন যা হ্যান্ডলারে পারফরম্যান্স ক্লিক () ক্লিক করে।

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

এই উদাহরণ দ্বারা ব্যবহৃত সংস্থানগুলি এখানে পাওয়া যাবে


ধন্যবাদ সঞ্চালন ক্লিক () আমি যা খুঁজছিলাম তা ছিল। আমার স্পিনারের উপর সেই পদ্ধতিটি দেখা উচিত ছিল তবে আমার শেষের দিকে কিছুটা বিভ্রান্তির কারণে এটি মিস হয়ে গেল। অনেক ধন্যবাদ!
জনরক

যদি আমি বিভিন্ন থ্রেড থেকে সঞ্চালন ক্লিক ব্যবহার করার জন্য রানঅনউইথ্রেড ব্যবহার করি তবে কী হবে।
12 12 12

5.0.2 এর আগে কাজ করা হয়েছে বলে মনে হচ্ছে 5.0.2 এ (কেবলমাত্র কিছু ডিভাইসের জন্য) ভাঙ্গা হয়েছে, তবে 5.1-এ আবার কাজ করা হচ্ছে ...
বেনজমিন পিট

কোনও ডায়ালগ ব্যবহার করার সময় আমার স্পিনার পারফেক্টক্লিক () ব্যবহার করে ডায়ালগের পিছনে উন্মুক্ত হয়ে যায়; এর কোন সমাধান?
হুযাইফা আসিফ

26

Spinnerআইটেমগুলি দেখানোর জন্য আপনাকে কেবল এটির performClick()পদ্ধতিটি কল করতে হবে ।

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

17

পূর্ববর্তী উদাহরণে যেমন দেখানো হয়েছে তেমন আপনাকে 2 রানবেল ব্যবহার করার দরকার নেই।

এটি যথেষ্ট হবে:

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

4
আমি মনে করি হ্যান্ডলারটি পৃথক থ্রেড থেকে কাজ করে দেখানোর জন্য এটি কেবল একটি ডেমো।
মার্ক রেনৌফ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.