我有这个主要活动: public class Home extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home); initializeStyle(); } private void initializeStyl
public class Home extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home); initializeStyle(); } private void initializeStyle() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); String foobar = prefs.getString("foobar", "hi"); Log.i("MyActivity", foobar); } // ... }
而这个PreferenceActivity:
public class Preferences extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } }
有了这个XML:
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:key="preferences_font" android:title="@string/preferences_font"> <EditTextPreference android:title="@string/preferences_font_size" android:key="foobar" android:defaultValue="12"> </EditTextPreference> </PreferenceCategory> </PreferenceScreen>
Log.i打印“hi”,这意味着这个首选项不存在或我命名错误.
关于我做错了什么的任何想法?
问候,
这可能有助于您重新回到正轨并拥有工作偏好:XML文件:preferences.xml
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="Preferences Font"> <EditTextPreference android:title="Select Font Size" android:key="foobar" android:summary="Enter Font Size" android:defaultValue="12" /> </PreferenceCategory> </PreferenceScreen>
JAVA FILE 1:Home.java
public class Home extends Activity { public SharedPreferences prefs; static public String fontPref; //you can make it an int or whatever you need static public String myValue; //to store new pref value /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { setContentView(R.layout.home); initializeStyle(); } private void initializeStyle() { prefs = PreferenceManager.getDefaultSharedPreferences(this); fontPref = prefs.getString("foobar", "hi"); //this doesn't actually change the value myValue = "This is a test"; Log.i("MyActivity", foobar); //won't show change yet } }
JAVA FILE 2:Prefernce.java
import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; //... and any other imports public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener{ private SharedPreferences prefs; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); //add other stuff here if you need, especially if you might have some //prefs that use buttons and need to set up your onClickListener for one } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPref, String key) { Editor editor = sharedPref.edit(); if(key.equalsIgnoreCase("foobar")){ Home.fontPref = sharedPref.getString("foobar", "some value"); editor.putString("foobar", Home.myValue); //where ever or whatever new value is } editor.commit(); Log.i("PrefsActivity", foobar); //should show change now } }
希望这可以帮助您走上正轨.当然有很多方法可以做这些事情,祝你好运,希望它有所帮助.