2011-08-24 46 views
14

Tôi đang tìm cách sử dụng enums cho danh sách bên trong tiện ích xoay tròn trên Android. Tôi đã thiết lập sự đếm của tôi như sau:Thêm Enums vào Array Adapter cho Spinner trong Android

public enum States{ 

AL("Alabama"), 
AK("Alaska"), 
AR("Arkansas"), 
AZ("Arizona"), 
CA("California"), 
CO("Colorado"), 
    ... (etc.) 
} 

bộ chuyển đổi mảng hiện tại của tôi là thiết lập như sau:

mAddressState.setAdapter(new ArrayAdapter<States>(this, android.R.layout.simple_list_item_1, States.values())); 

này hầu như làm việc, nhưng trong danh sách spinner của tôi, tôi kết thúc với các chữ viết tắt, chứ không phải là tên tiểu bang (đó là những gì tôi sẽ cho). Có cách giải quyết nào để thiết lập chính xác không?

Trả lời

33

Tôi hy vọng điều này sẽ giúp ai đó. Tôi mất một lúc để tự mình tìm ra. Bí quyết là ghi đè lên toString trong enum của bạn. Mã cho tiểu bang enum của bạn sẽ là:

public enum States{ 
    AL("Alabama"), 
    AK("Alaska"), 
    AR("Arkansas"), 
    AZ("Arizona"), 
    CA("California"), 
    CO("Colorado"), 
    ... (etc.); 

    private String theState; 

    States(String aState) { 
    theState = aState; 
    } 

    @Override public String toString() { 
    return theState; 
    } 
} 

Sau đó, tạo adapter cũng giống như bạn làm:

mAddressState.setAdapter(new ArrayAdapter<States>(this, 
     android.R.layout.simple_list_item_1, States.values())); 

và tên dài sẽ hiển thị trong các spinner. Để lấy tên viết tắt từ bộ điều hợp, để lưu trữ tên đã chọn, ví dụ, sử dụng hàm enum.name(). Ví dụ:

Spinner spinner = (Spinner) myView.findViewById(R.id.theState); 
String selected = ((States)spinner.getSelectedItem()).name(); 
0

Thêm một constructor enum như vậy ... sau đó thay thế States.values ​​() với States.fullName()

public enum States{ 

    AL("Alabama"), 
    AK("Alaska"), 
    ... (etc.) 

    private String fullName; 

    States(String fullName) { 
     this.fullName = fullName; 
    } 

    public String fullName() { return fullName; } 
} 
+0

Điều đó không hiệu quả. Tôi đã thực sự làm điều đó rồi và không chỉ định, xin lỗi. Bộ điều hợp mảng dường như không thích tôi cố gắng làm điều đó. mAddressState.setAdapter (new ArrayAdapter (this, android.R.layout.simple_list_item_1, States.getStateName())); Tôi cũng đã thử đặt loại bộ điều hợp mảng thành ArrayAdapter mới Vẫn không làm những gì tôi theo sau. Lời khuyên nào khác? – RyanInBinary

0

có lẽ bạn có thể thử cách ghi đè các toString() chức năng như trình bày ở đây here. Tôi chưa thử nhưng tôi sắp sửa.

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