Làm thế nào để có được giá trị Spinner?


263

Trong Android, tôi đang cố gắng để có được giá trị Spinner đã chọn với người nghe.

Cách tốt nhất để có được giá trị của spinner là gì?

Câu trả lời:


571
Spinner mySpinner = (Spinner) findViewById(R.id.your_spinner);
String text = mySpinner.getSelectedItem().toString();

11
"Giá trị" là khá mơ hồ ở đây. Điều này lấy ra tiêu đề mục spinner hiện tại (ví dụ như trong Chuỗi được hiển thị cho người dùng), nhưng không phải là giá trị của nó nếu bạn ánh xạ một mảng int vào spinner chẳng hạn.
A. Steenbergen

1
@Doge để lấy giá trị của mục đã chọn như giá trị số nguyên, ví dụ: chúng ta nên tạo int [] valueArray và gửi nó trong hàm onCreate có thể từ Arrayays.xml để chúng ta có thể sử dụng valueArray [(int) mySpinner.getSelectedItemId ()] để lấy giá trị nguyên
Belal mazlom

128

Spinner sẽ kích hoạt sự kiện "OnItemSelected" khi có thứ gì đó được chọn:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        Object item = parent.getItemAtPosition(pos);
    }
    public void onNothingSelected(AdapterView<?> parent) {
    }
});

Cảm ơn - điều đó đã làm việc, mặc dù tôi cần thêm kiểu trả về void cho các phương thức.
Sam Dutton

6
Có thực sự không có cách nào để đạt được điều này mà không dựa vào vị trí của vật phẩm?
Vinz

7
Không phải là một giải pháp rất hữu ích nếu bạn muốn đọc giá trị spinner mà không cần dựa vào một sự kiện lựa chọn.
AndroidDev

3
@Patrick Ghi đè chú thích không bao giờ được yêu cầu, nó chỉ cho trình biên dịch "Bạn có thể kiểm tra xem việc ghi đè này có được thực hiện chính xác không?"
SiXoS

1
Còn việc lấy mục được chọn mặc định khi không có thay đổi nào được thực hiện trên đó thì sao? @ dodo một là thích hợp nhất.
Xtreme Biker

49

Giả sử đây là xml của bạn với các mục nhập spinner (ví dụ: tiêu đề) và các giá trị:

<resources>
    <string-array name="size_entries">
        <item>Small</item>
        <item>Medium</item>
        <item>Large</item>
    </string-array>

    <string-array name="size_values">
        <item>12</item>
        <item>16</item>
        <item>20</item>
    </string-array>
</resources>

và đây là spinner của bạn:

<Spinner
    android:id="@+id/size_spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:entries="@array/size_entries" />

Sau đó, trong mã của bạn để có được các mục:

Spinner spinner = (Spinner) findViewById(R.id.size_spinner);
String size = spinner.getSelectedItem().toString(); // Small, Medium, Large

và để có được các giá trị:

int spinner_pos = spinner.getSelectedItemPosition();
String[] size_values = getResources().getStringArray(R.array.size_values);
int size = Integer.valueOf(size_values[spinner_pos]); // 12, 16, 20

Thx, điều này nên có trong tài liệu ANDR chính thức trên spinner, chúng chỉ hiển thị nhận giá trị thông qua Listener.
hình ảnh

đây chính xác là những gì tôi đang tìm kiếm
jet_choong

Giải pháp hoàn hảo! android:entrieslàm cho ngày của tôi
coderpc

15

Có, bạn có thể đăng ký một người nghe qua setOnItemSelectedListener(), như được trình bày ở đây .


Cảm ơn - điều này cũng làm việc và (tôi nghĩ) nó làm cho mã dễ đọc hơn.
Sam Dutton

14
View view =(View) getActivity().findViewById(controlId);
Spinner spinner = (Spinner)view.findViewById(R.id.spinner1);
String valToSet = spinner.getSelectedItem().toString();

12

Nếu bạn đã biết mục này là a String, tôi thích:

String itemText = (String) mySpinner.getSelectedItem();

Gọi toString()vào một Objectcái mà bạn biết Stringcó vẻ như là một con đường vòng hơn là chỉ truyền Objectđến String.


2

thêm setOnItemSelectedListener để tham chiếu spinner và nhận dữ liệu như thế`

 mSizeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
            selectedSize=adapterView.getItemAtPosition(position).toString();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.