我在我的应用中设置偏好设置时遇到了问题。
在主布局中,我有按钮打开设置布局:
Button btnPreferences = (Button) findViewById(R.id.btnPreferences);
btnPreferences.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent i = new Intent("com.absolutkarlos.AppPreferenceActivity");
startActivity(i);
}
});
然后,它打开PreferenceActivity:
public class AppPreferenceActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//--load the preferences from an XML file---
addPreferencesFromResource(R.xml.user_references);
}
}
xml文件:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Category 1">
<CheckBoxPreference
android:title="Checkbox"
android:defaultValue="false"
android:summary="True of False"
android:key="checkboxPref" />
</PreferenceCategory>
<PreferenceCategory android:title="Category 2">
<EditTextPreference
android:summary="Enter a string"
android:defaultValue="@string/food"
android:title="Edit Text"
android:key="editTextPref"
android:name="@string/name"/>
<RingtonePreference
android:summary="Select a ringtone"
android:title="Ringtones"
android:key="ringtonePref"
android:name="Ringtone Preference" />
<PreferenceScreen
android:title="Second Preference Screen"
android:summary=
"Click here to go to the second Preference Screen"
android:key="secondPrefScreenPref" >
<EditTextPreference
android:summary="Enter a string"
android:title="Edit Text (second Screen)"
android:key="secondEditTextPref"
android:name="EditText" />
</PreferenceScreen>
</PreferenceCategory>
</PreferenceScreen>
一切看起来都可以正常工作,但是当我测试它时,不要保存我希望它保存的字符串。 我的意思是,我点击设置按钮,打开设置布局,我在EditTextPreference调用NAME上写了一个文本,但它没有保存它,而是LogCat:sendUserActionEvet()mView == null 那么,我做错了什么?我错过了一步吗?或者忘了添加一些东西?
基本上,我只是想让用户将自己的名字写成设置的一部分,这个名称将在主要布局中显示为一个大标题。如果用户可以写一个昵称。它只是一个应用程序必须始终记住的字符串。
感谢您的帮助......
答案 0 :(得分:0)
正如您可能已阅读过的那样,消息:
LogCat: sendUserActionEvet() mView == null
在S4设备上可以忽略。
您需要阅读Preference的值,并在AppPreferenceActivity上为其标题更改它,设置onResume方法:
@Override
public void onResume(){
super.onResume();
EditTextPreference preference = (EditTextPreference) findPreference("secondEditTextPref");
preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setTitle(newValue.toString());
return true;
}
});
String name = preference.getText();
if(name != null)
preference.setTitle(name);
}
此外,您必须删除addPreferencesFromResource方法,因为已弃用。您应该使用 onBuildHeaders 方法。在这里,您可以看到PreferenceActivity的示例。