2009-12-22 98 views
197

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

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

+1

Bạn chắc chắn nên chấp nhận [câu trả lời của dodo] (http://stackoverflow.com/a/7486969/1747491). – theblang

Trả lời

478
Spinner mySpinner=(Spinner) findViewById(R.id.your_spinner); 
String text = mySpinner.getSelectedItem().toString(); 
+7

"Giá trị" khá mơ hồ ở đây. Điều này lấy tiêu đề spinner item hiện tại (như trong, String đượ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. –

+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 giá trị int []Array và tệp trong hàm onCreate có thể từ arrays.xml để chúng ta có thể sử dụng valuesArray [(int) mySpinner.getSelectedItemId()] để có được giá trị số nguyên –

11

Có, bạn có thể đăng ký người nghe qua setOnItemSelectedListener(), như được minh họa here.

+0

Cảm ơn - điều này đã làm việc quá, và (tôi nghĩ) nó làm cho mã dễ đọc hơn. –

112

Các Spinner nên bắn một "OnItemSelected" sự kiện khi một cái 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) { 
    } 
}); 
+0

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

+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 mục? – Vinz

+5

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 dựa vào sự kiện lựa chọn. – AndroidDev

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

Nếu bạn đã biết tài liệu là một String, tôi thích:

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

Gọi toString() trên số Object mà bạn biết là String có vẻ giống như đường vòng xoay so với chỉ cần đúc Object đến String.

33

nói đây là xml của bạn với mục spinner và giá trị (tức là danh hiệu.):

<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à để nhận 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 
+0

Thx, điều này phải nằm trong tài liệu chính thức của ANDR trên spinner, chúng chỉ cho thấy giá trị thông qua Listener. – visual

+0

chính xác những gì tôi đang tìm kiếm –

Các vấn đề liên quan