स्पिनर को सीधे लेआउट xml में बदलना


246

क्या लेआउट Xml में सही स्पिनर के विकल्पों को आबाद करना संभव है? यह पृष्ठ बताता है कि मुझे एक ArrayAdapter का उपयोग करना चाहिए? ऐसा लगता है कि यह करने में सक्षम नहीं किया जा रहा है अजीब ..

जवाबों:


582

मुझे इस पर यकीन नहीं है, लेकिन इसे एक शॉट दें।

अपने तार में। xml परिभाषित करें:

<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"
13 Г И О И О

3
एक त्वरित ध्यान दें ... मेरी समझ से, स्पिनर समर्थन नहीं करते हैं drawSelectorOnTopक्योंकि स्पिनर के अलावा कोई अन्य चयनकर्ता नहीं है। समाधान निश्चित रूप से काम करता है, धन्यवाद!
जबरी

11
@ SupportГИΕИО स्पिनर समर्थन नहीं करता है android:entryValues। ListPreference इसका समर्थन करता है।
TalkLittle

1
@ GSMLittle क्या यह हाल ही में हुआ अवमूल्यन था? जिस समय यह लिखा गया था उस समय इसने काम किया था।
अंधविश्वासी

1
@blindstuff सत्यापित करना आसान है। के स्रोत कोड को देखो Spinnerऔर AbsSpinner। एपीआई 19 और 23 दोनों पर, एब्सपिनर कंस्ट्रक्टर उपयोग करता है, R.styleable.AbsSpinner_entriesलेकिन कहीं भी वे उपयोग नहीं करते हैं entryValues। यह केवल एक संयोग है कि आपका कोड वही कर रहा था जिसकी आपको उम्मीद थी। (या हो सकता है कि कुछ निर्माताओं की रोम में एक कस्टम स्पिनर कार्यान्वयन हो जो वास्तव में संभालता है android:entryValues?)
टॉकलैटल

26

इसे अपनी String.xml फ़ाइल में परिभाषित करें और उस सरणी को नाम दें जो आप चाहते हैं, जैसे कि "वज़न"

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

और आपके लेआउट में यह कोड। xml

<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

पहली टिप्पणी के संबंध में: यदि आप ऐसा करते हैं, तो आपको एक त्रुटि मिलेगी (एंड्रॉइड स्टूडियो में)। यह Android नामस्थान से बाहर होने के संबंध में है। यदि आप इस त्रुटि को ठीक करना नहीं जानते हैं, तो नीचे दिए गए उदाहरण को देखें। उम्मीद है की यह मदद करेगा!

उदाहरण -बाहर:

<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
काम नहीं करता है। XML फ़ाइल चाहती है कि उसके string-arrayपास एक nameविशेषता हो, और वह किसी को पहचान न सके android:name
बजे डैन चालीसल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.