2012-04-18 20 views
5

Tôi có một tập tin xml (/res/xml/setting.xml) cho PreferenceActivity:Cách truy cập <item> từ <string-array> tài nguyên trong một XML android?

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
     <PreferenceCategory android:title="Main Settings"> 
      <ListPreference 
       android:title="Background Image" 
       android:summary="Set the background image" 
       android:key="key_background" 
       android:entries="@array/background" 
       android:entryValues="@array/background_values" 
       android:defaultValue="winter.png" /> 
     </PreferenceCategory> 
</PreferenceScreen> 

Sau đó, tôi có một tập tin xml "/res/values/string.xml":

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <string-array name="background"> 
     <item>Winter</item> 
     <item>Desert</item> 
    </string-array> 

    <string-array name="background_values"> 
     <item>winter.png</item> 
     <item>desert.png</item> 
    </string-array> 

</resources> 

Xem ListPreference trong setting.xml, tôi muốn android:defaultValue được đặt bằng winter.png. Nhưng tôi cũng không muốn được thiết lập với giá trị hardcoded/hằng số trong xml, vì vậy tôi đã thử với các giá trị khác nhau như "@array/background_values/0", "@array/background_values[0]", v.v ... nhưng tất cả đều không thành công.

Vì vậy, câu hỏi là:

  1. cú pháp chính xác cho accesing một mục nguồn chuỗi mảng trong xml khác là gì?
  2. Làm cách nào để đảm bảo rằng android:defaultValue có hoạt động không?
  3. Có tài liệu nào về cú pháp @array không? Tôi không thể tìm thấy bất kỳ.

Trả lời

0

Sử dụng các chỉ số của các giá trị mà bạn muốn từ android mảng của bạn: defaultValue = "0"

Đoạn mã trên chỉ làm việc vì tôi đang sử dụng số trong chuỗi giá trị mảng của tôi, nó không phải là vì chỉ mục.

+0

Xin chào, bạn có biết cách kiểm tra xem android: defaultValue có đang hoạt động không? – null

+0

Bạn có thể muốn 'Xóa dữ liệu' trong ứng dụng của mình để đặt lại tùy chọn về mặc định. Bạn có thể làm điều đó trên Cài đặt điện thoại. (Ngoài ra xin đừng quên upvote và/hoặc đánh dấu này như một câu trả lời nếu nó giúp bạn) – julian

+0

Cố gắng chọn một giá trị khác với giá trị mặc định. Sau đó, đi tới Cài đặt và xóa dữ liệu của ứng dụng của bạn. Lần tiếp theo bạn mở ứng dụng của mình, ứng dụng phải hiển thị giá trị mặc định. – julian

1
  1. Android Developers không có cách nào để tham chiếu tài nguyên đến string-array trong XML, không phải để metion các mục của nó.
  2. Bạn có thể xóa dữ liệu của ứng dụng, cài đặt lại và mở ứng dụng, đi tới màn hình cài đặt, sau đó defaultValue sẽ chuyển đến tệp phân chia được chia sẻ của bạn. Nếu defaultValue khớp với một trong các mục, nó sẽ được chọn.

BTW, bạn có thể thay đổi các mục của mình thành chuỗi để tham chiếu đến chuỗi để tránh mã hóa cứng.

+1

** Tham chiếu đến chuỗi ** không phải là giá trị hardcoded, tại sao không sử dụng nó? –

+1

Tôi thấy, vì vậy tôi có thể tạo một tài nguyên cho winter.jpg (giả sử tôi cho nó id = default_background) và winter.jpg trong background_values ​​ được đổi thành @ string/default_background. Tôi tìm thấy nó một chút không trực quan, nhưng tôi đoán đó là cách duy nhất để gõ winter.jpg một lần trong xml. – null

0

1- Xác định một tập tin riêng biệt cho mảng (res/values ​​/ arrays.xml)

arrays.xml

<?xml version="1.0" encoding="utf-8"? 
<resources> 
<string-array name="settings_order_by_labels"> 
    <item>label1</item> 
    <item>label2</item> 
</string-array> 

<string-array name="settings_order_by_values"> 
    <item>value1</item> 
    <item>value2</item> 
</string-array> 
</resources> 

2- sử dụng mảng này trong tập tin Preference xml:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:title="@string/settings_title"> 

<ListPreference 
    android:defaultValue="value1" 
    android:entries="@array/settings_order_by_labels" 
    android:entryValues="@array/settings_order_by_values" 
    android:key="order_by" 
    android:title="Order By" /> 
</PreferenceScreen> 
Các vấn đề liên quan