所以大概另一個newbish問題:)addPreferencesFromResource使得sharedPreferences不行
我有一個Activity
,一個AppWidgetProvider
和PreferenceActivity
。在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>
你們很棒!那解決了 - 當然。我花了好幾天的時間試圖解決這個問題。非常感謝! – MFoller