2011-09-08 60 views
10

Tôi đã cố đặt giá trị mặc định cho ListPreference nhưng không có gì hiển thị.Giá trị mặc định ListPreference không hiển thị

Bạn có thể kiểm tra mã của tôi xem có bất kỳ lỗi nào không?

Cảm ơn.

Quả thật, Emad

này nằm trong tập tin settings.xml:

<PreferenceCategory android:title="Media:"> 
    <CheckBoxPreference android:key="ChimeWhenMusicIsPlaying" 
     android:title="@string/ChimeWhenMusicIsPlayingTitle" android:summary="@string/ChimeWhenMusicIsPlayingSummary" 
     android:defaultValue="false" /> 

    <ListPreference android:title="Chime Volume" 
     android:key="ChimeVolume" android:summary="Select volume for the chiming sound." 
     android:entries="@array/chimeVolumeLabels" android:entryValues="@array/chimeVolumeValues" 
     android:defaultValue="1" /> 

</PreferenceCategory> 

này nằm trong mảng file:

<resources> 

    <string-array name="chimeVolumeLabels"> 
    <item>Default</item> 
    <item>Soft</item> 
    <item>Medium</item> 
    <item>Loud</item> 
    </string-array> 

    <string-array name="chimeVolumeValues"> 
    <item>1</item> 
    <item>2</item> 
    <item>3</item> 
    <item>4</item> 
    </string-array> 
</resources> 

Trả lời

27

Tôi thấy rằng đôi khi tôi cần xóa dữ liệu ứng dụng. Gỡ cài đặt và cài đặt lại ứng dụng. Sau đó, mọi thứ hoạt động như mong đợi.

+0

bạn đã tiết kiệm được nhiều giờ trong cuộc sống của mình. – akashr

+0

hành vi lạ, cảm ơn bạn – speedDeveloper

+1

Điều này có thể là do Android sẽ chỉ đặt giá trị mặc định ** một lần ** - xem [this] (https://developer.android.com/reference/android/preference/PreferenceManager .html # setDefaultValues ​​(android.content.Context,% 20int,% 20boolean)) –

10

tôi thấy rằng tôi phải gọi PreferenceManager .setDefaultValues ​​() trong Hoạt động Tuỳ chọn của tôi để giá trị mặc định của tôi hiển thị ban đầu.

public class PreferencesActivity extends PreferenceActivity { 

    @Override 
    protected void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // This static call will reset default values only on the first ever read 
     PreferenceManager.setDefaultValues(getBaseContext(), R.xml.settings, false); 

     addPreferencesFromResource(R.xml.settings); 
    } 
} 
+2

+1 cho câu trả lời này. Cho đến khi hoạt động ưu tiên được gọi cho lần đầu tiên sau khi cài đặt của ứng dụng, lệnh gọi đến * sharedPreferences.getString (khóa, null) * sẽ trả về null ngay cả khi thuộc tính * android: defaultValue * được đặt trong xml. Nếu các giá trị ưu tiên mặc định cần phải có sẵn trước khi hoạt động ưu tiên được gọi trong ứng dụng lần đầu tiên thì cuộc gọi PreferenceManager.setDefaultValues ​​() là một giải pháp tuyệt vời. – pavel

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