2013-02-04 30 views
5

Tôi có một mảng chuỗi quy định tại arrays.xml tham chiếu hai chuỗi trong strings.xml:Lấy chỉ số của một mục mảng dựa trên giá trị

<string-array name="my_options"> 
    <item>@string/my_string_one</item> 
    <item>@string/my_string_two</item> 
</string-array> 

<string name="my_string_one">Value 1</string> 
<string name="my_string_two">Value 2</string> 

tôi cần phải có được vị trí của một mục trong mảng, dựa trên giá trị của chuỗi. Chuỗi I.e "Giá trị 2" có chỉ mục 1. Tôi rõ ràng có thể chỉ mã cứng các giá trị vị trí (0, 1, v.v.), nhưng nó sẽ phá vỡ nếu thứ tự của các chuỗi bị thay đổi. Tôi muốn mã độc lập về mặt vị trí. Các công trình sau:

int value = Arrays.asList((getResources().getStringArray(R.array.my_options))).indexOf(getString(R.string.my_string_one)); 

Có cách nào nhỏ gọn hơn, đơn giản hơn để thực hiện việc này không?

+0

bạn có thể giải thích thêm về những gì bạn đang làm không? Tôi đang nghĩ về việc có thể sử dụng một tệp XSL để chuyển đổi xml thành XML mà bạn muốn, sau đó bạn có thể hardcode nơi giá trị sẽ nằm trong xml mới. Điều đó có ý nghĩa? – Malachi

Trả lời

7

Mã bạn hiển thị trong câu hỏi của mình về cơ bản là những gì bạn cần làm.

Tuy nhiên, bạn có thể cấu trúc lại nó để làm cho nó dễ đọc hơn: Refactor Arrays.asList ((getResources(). GetStringArray (R.array.my_options))) vào một Danh sách (tôi không biết cách ứng dụng của bạn mã trông giống như, nhưng bạn có thể lưu trữ Danh sách này dưới dạng trường thể hiện hoặc thậm chí là trường tĩnh (lớp)).

static List<String> myOptions; 

.... 
    if (myOptions == null) { 
     myOptions = Arrays.asList((getResources().getStringArray(R.array.my_options))); 
    } 

... 

    int value = myOptions.indexOf(getString(R.string.my_string_one)); 
0

Có thể một HashSet có thể giúp bạn hoặc điều gì đó tương tự, nơi bạn đặt tên chuỗi của mình làm khóa và giá trị làm giá trị. Sau đó, bạn có thể chọn giá trị với tên của khóa.

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