标签:preferenceactivity android sharedpreferences preferences
我有这个主要活动:
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
}
}
希望这可以帮助您走上正轨.当然有很多方法可以做这些事情,祝你好运,希望它有所帮助.
标签:preferenceactivity,android,sharedpreferences,preferences 来源: https://codeday.me/bug/20190730/1577532.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。