设置首选项Android

设置首选项Android,android,key,preferences,setting,Android,Key,Preferences,Setting,我在应用程序中设置首选项时遇到问题 在主布局中,我有打开设置布局的按钮: Button btnPreferences = (Button) findViewById(R.id.btnPreferences); btnPreferences.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent i = new Inten

我在应用程序中设置首选项时遇到问题

在主布局中,我有打开设置布局的按钮:

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调用名上写一个文本,但它不保存它,而是LogCat:sendUserActionEvet mView==null 那么,我做错了什么?我漏了一步吗?还是忘了加点什么

基本上,我只想用户写他的名字作为设置的一部分,这个名字将显示在主布局作为一个大标题。如果用户愿意,他可以写一个昵称。它只是一个应用程序必须永远记住的字符串


感谢您的帮助…

正如您可能已经读到的,消息:

LogCat: sendUserActionEvet() mView == null 
在S4设备上可以忽略

您需要读取Preference的值,并在AppPreferenceActivity的set 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方法。这里您可以看到。

您的设备是S4?是的,它是。我在某个地方读到s4对此有一个问题,但是我能做些什么才能在我的s4和任何其他设备上运行良好。我可以在s4上测试,让我试试。我最近刚刚在一个s4上测试,SAMSUMG-SGH-I337,工作正常,当我设置OK按钮时,字符串被保存。我会发布,你问题的解决方案。