2011-11-27 50 views
3

所以大概另一個newbish問題:)addPreferencesFromResource使得sharedPreferences不行

我有一個Activity,一個AppWidgetProviderPreferenceActivity。在PreferenceActivity我有一個ListPreference我用它來定義小部件的文本大小。在主要活動啓動時,sharedPreferences加載沒有問題,但運行PreferenceActivity後,我無法再在主要活動中正確檢索sharedPreference值。我在PreferenceActivity試圖檢索sharedPreference值直接,同樣的事情發生了:由於某些原因,當我嘗試在我請addPreferencesFromResource(R.drawable.settings);(在註釋「測試1」),以獲得從sharedPreferences的值,它說:

「onStart()1,size:small」和「Small works!」

I.e.有用。但是,當我嘗試檢索資源調用後的值(評論'Test 2')時,它說:

「onStart()2,size:small」and「It does not work .. 。「

iee它不工作。我不知道爲什麼。很明顯,它獲得了sharedPreference的價值,因爲它表示目前的textWidgetSize在兩種情況下都等於「小」,但由於某種原因,在資源調用之後它不認爲「小」=「小」。你們有什麼想法嗎?

這裏的PreferenceActivity代碼:

package dk.mfoller.android.basicnote; 

import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.preference.PreferenceActivity; 
import android.preference.PreferenceManager; 
import android.widget.Toast; 
import dk.mfoller.android.basicnote.R; 

public class BasicNoteSettings extends PreferenceActivity{ 

    String widgetTextSize = "small"; 
    boolean widgetLineCounter = true; 

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

     // Calls a function to get the preferences 
     getPrefs(); 

     // Test 1 
     makeToast("onStart() 1, size: " + widgetTextSize); 
     if(widgetTextSize == "small") { 
      makeToast("Small works!"); 
     } else if(widgetTextSize == "medium") { 
      makeToast("Medium works!"); 
     } else if(widgetTextSize == "large") { 
      makeToast("Large works!"); 
     } else { 
      makeToast("It doesn't work ..."); 
     } 

     // Gets the preference layout from xml 
     addPreferencesFromResource(R.drawable.settings); 

     // Calls a function to get the preferences 
     getPrefs(); 

     // Test 2 
     makeToast("onStart() 2, size: " + widgetTextSize); 
     if(widgetTextSize == "small") { 
      makeToast("Small works!"); 
     } else if(widgetTextSize == "medium") { 
      makeToast("Medium works!"); 
     } else if(widgetTextSize == "large") { 
      makeToast("Large works!"); 
     } else { 
      makeToast("It doesn't work ..."); 
     } 

    } 

    // A function to get the preferences  
    private void getPrefs() { 
     // Gets data from the shared preferences 
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
     widgetTextSize = prefs.getString("text_size_list", "small"); 
     widgetLineCounter = prefs.getBoolean("line_counter_cbox", true); 
    } 

    // A function to display a popup 
    private void makeToast(String popup) { 
     Toast.makeText(this, popup, Toast.LENGTH_SHORT).show(); 
    } 

} 

這裏的XML文檔:

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

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
    android:key="basicnote_settings" 
    android:title="@string/settings_label"> 

    <PreferenceCategory android:title="Text size"> 
     <ListPreference android:key="text_size_list" 
     android:title="Widget text size" 
     android:summary="@string/text_size_summary" 
     android:entries="@array/text_size_options" 
     android:entryValues="@array/text_size_values" 
     android:defaultValue="small" /> 
    </PreferenceCategory> 

    <PreferenceCategory android:title="Other settings"> 
     <CheckBoxPreference android:key="line_counter_cbox" 
      android:title="Line counter" 
      android:summary="@string/hidden_lines_summary" 
      android:defaultValue="true" /> 
    </PreferenceCategory> 

</PreferenceScreen> 

這裏是我的資源字符串:

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

<!-- Defines various resources --> 
<resources> 
    <string name="app_name">basicNote</string> 
    <string name="note_hint">Tap to add some notes ...</string> 
    <string name="fake_load">Loading notes ...</string> 

    <string name="settings_label">basicNote settings</string> 

    <string name="text_size_summary">Set the size of the widget text</string> 
    <string-array name="text_size_options"> 
     <item>Small (12sp)</item> 
     <item>Medium (13sp)</item> 
     <item>Large (15sp)</item> 
    </string-array> 
    <string-array name="text_size_values"> 
     <item>small</item> 
     <item>medium</item> 
     <item>large</item> 
    </string-array> 

    <string name="hidden_lines_summary">Show/hide the number of lines not shown in the widget</string> 
</resources> 

回答

3

你使用一個String對象的==。改用.equals(yourString)。

+1

你們很棒!那解決了 - 當然。我花了好幾天的時間試圖解決這個問題。非常感謝! – MFoller

2

嘗試改變所有的==在字符串與equals()比較。例如:

if(widgetTextSize.equals("small")) 
{ 
} 

,並看看this文章

+0

不錯的文章順便說一句,謝謝 – MFoller