Mempopulasikan pemintal langsung di tata letak xml

246

Apakah mungkin untuk mengisi opsi Spinner tepat di tata letak xml? Halaman ini menyarankan saya harus menggunakan ArrayAdapter? Tampaknya canggung tidak bisa melakukannya ..

cambraca
sumber

Jawaban:

582

Saya tidak yakin tentang ini, tetapi mencobanya.

Di strings.xml Anda tentukan:

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

Di tata letak Anda:

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

Saya pernah mendengar ini tidak selalu berhasil pada perancang, tetapi kompilasi baik-baik saja.

penutup mata
sumber
39
Hanya ingin menambahkan bahwa jika Anda ingin nilai terpisah per item yang dipilih, Anda dapat menentukan android:entryValues="@array/array_name_values".
Ε Г И І И О
3
Satu catatan singkat ... dari pemahaman saya, Spinners tidak mendukung drawSelectorOnTopkarena tidak ada pemilih terpisah selain Spinner itu sendiri. Solusinya pasti berhasil, terima kasih!
Jabari
11
@ ΕГИІИО Spinner TIDAK mendukung android:entryValues. ListPreference mendukungnya.
TalkLittle
1
@ TalkLittle apakah ini penghinaan baru-baru ini? Pada saat ini ditulis itu berhasil.
blindstuff
1
@blindstuff Sangat mudah untuk memverifikasi. Lihatlah kode sumber Spinnerdan AbsSpinner. Pada API 19 dan 23, konstruktor AbsSpinner menggunakan R.styleable.AbsSpinner_entriestetapi tidak ada di mana pun mereka gunakan entryValues. Hanya kebetulan bahwa kode Anda melakukan apa yang Anda harapkan. (Atau mungkin beberapa ROM pabrikan memiliki implementasi Spinner khusus yang benar-benar menangani android:entryValues?)
TalkLittle
26

Tentukan ini di file String.xml Anda dan beri nama array apa yang Anda inginkan, seperti "Bobot"

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

dan kode ini di layout.xml Anda

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

Dalam file java Anda, getActivitydigunakan dalam fragmen; jika Anda menulis kode itu dalam aktivitas, maka hapus 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;
    }
Zona Teknologi
sumber
-2

Berkenaan dengan komentar pertama: Jika Anda melakukan ini, Anda akan mendapatkan kesalahan (di Android Studio). Ini sehubungan dengan itu keluar dari namespace Android. Jika Anda tidak tahu cara memperbaiki kesalahan ini, lihat contoh di bawah ini. Semoga ini membantu!

Contoh -Sebelum:

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

Contoh - Setelah:

<string-array android:name="roomSize">
    <item>Small(0-4)</item>
    <item>Medium(4-8)</item>
    <item>Large(9+)</item>
</string-array>
CPUSCIMAJOR
sumber
1
Tidak bekerja File XML ingin nya string-arraymemiliki nameatribut, dan tidak mengenali android:namesatu.
Dan Chaltiel