XML বিন্যাসে সরাসরি স্পিনার পপুলিং


246

এক্সএমএল লেআউটে কোনও স্পিনারের বিকল্পগুলি স্থাপন করা কি সম্ভব? এই পৃষ্ঠাটি পরামর্শ দেয় যে আমার একটি অ্যারেএডাপ্টার ব্যবহার করা উচিত? এটি করা সম্ভব হচ্ছে না বলে মনে হচ্ছে বিশ্রী।

উত্তর:


582

আমি এ সম্পর্কে নিশ্চিত নই, তবে একটি শট দিন।

আপনার স্ট্রিং.এক্সএমএল সংজ্ঞায়িত:

<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>

আপনার লেআউটে:

<Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:entries="@array/array_name"
    />

আমি শুনেছি এটি সবসময় ডিজাইনারের কাজ করে না, তবে এটি ঠিকঠাক করে।


39
কেবলমাত্র এটি যোগ করতে চেয়েছিলেন আপনি যদি নির্বাচিত আইটেমের জন্য পৃথক মান চান তবে আপনি উল্লেখ করতে পারেন android:entryValues="@array/array_name_values"
Г И І И О

3
একটি দ্রুত নোট ... আমার বোধগম্যতার সাথে, স্পিনাররা সমর্থন করে না drawSelectorOnTopযেহেতু স্পিনার ছাড়া অন্য কোনও পৃথক নির্বাচক নেই। সমাধান অবশ্যই কাজ করে, ধন্যবাদ!
জাবারি

11
@। স্পিনার সমর্থন করে নাandroid:entryValues । তালিকাগুলি এটি সমর্থন করে।
টকলিটল

1
@ ট্যালকিটল এটি কি সাম্প্রতিক অবচয় ছিল? এই সময় এটি লেখা ছিল।
ব্লাইন্ডস্টফ

1
@ ব্লাইন্ডস্টফ এটি যাচাই করা সহজ। এর উত্স কোড Spinnerএবং দেখুন AbsSpinner। উভয় এপিআই 19 এবং 23 এ, অ্যাবস্পিনার কনস্ট্রাক্টর ব্যবহার করে R.styleable.AbsSpinner_entriesতবে তারা কোথাও ব্যবহার করে না entryValues। এটি কেবল একটি কাকতালীয় বিষয় যা আপনার কোডটি আপনি প্রত্যাশা করেছিলেন doing (বা সম্ভবত কিছু প্রস্তুতকারকের রমগুলির একটি কাস্টম স্পিনার বাস্তবায়ন রয়েছে যা আসলে পরিচালনা করে android:entryValues?)
টকলিটল

26

আপনার স্ট্রিং.এক্সএমএল ফাইলে এটি সংজ্ঞায়িত করুন এবং আপনি যা চান তার অ্যারের নাম দিন, যেমন "ওজন"

<string-array name="Weight">
<item>Kg</item>
<item>Gram</item>
<item>Tons</item>
</string-array>

এবং আপনার কোড.আরএমএল এই কোড

<Spinner 
        android:id="@+id/fromspin"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:entries="@array/Weight"
 />

আপনার জাভা ফাইলে, getActivityখণ্ডে ব্যবহৃত হয়; আপনি যদি সেই কোডটি ক্রিয়াকলাপে লিখেন তবে সরান getActivity

a = (Spinner) findViewById(R.id.fromspin);

 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this.getActivity(),
                R.array.weight, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        a.setAdapter(adapter);
        a.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
                if (a.getSelectedItem().toString().trim().equals("Kilogram")) {
                    if (!b.getText().toString().isEmpty()) {
                        float value1 = Float.parseFloat(b.getText().toString());
                        float kg = value1;
                        c.setText(Float.toString(kg));
                        float gram = value1 * 1000;
                        d.setText(Float.toString(gram));
                        float carat = value1 * 5000;
                        e.setText(Float.toString(carat));
                        float ton = value1 / 908;
                        f.setText(Float.toString(ton));
                    }

                }



            public void onNothingSelected(AdapterView<?> parent) {
                // Another interface callback
            }
        });
        // Inflate the layout for this fragment
        return v;
    }

-2

প্রথম মন্তব্যের প্রসঙ্গে: আপনি এটি করলে আপনি একটি ত্রুটি পাবেন (অ্যান্ড্রয়েড স্টুডিওতে)। এটি এর সাথে অ্যান্ড্রয়েড নেমস্পেসের বাইরে থাকা সম্পর্কিত। আপনি যদি এই ত্রুটিটি ঠিক করতে জানেন না তবে নীচের উদাহরণটি দেখুন। আশাকরি এটা সাহায্য করবে!

উদাহরণ -পূর্বে:

<string-array name="roomSize">
    <item>Small(0-4)</item>
    <item>Medium(4-8)</item>
    <item>Large(9+)</item>
</string-array>

উদাহরণ - এর পরে:

<string-array android:name="roomSize">
    <item>Small(0-4)</item>
    <item>Medium(4-8)</item>
    <item>Large(9+)</item>
</string-array>

1
কাজ করে না। এক্সএমএল ফাইলটি তার string-arrayএকটি nameবৈশিষ্ট্য থাকতে চায় এবং এটির স্বীকৃতি দেয় না android:name
ড্যান চালটিয়েল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.