设置首选项Android

时间:2014-08-16 21:33:31

标签: android key preferences setting

我在我的应用中设置偏好设置时遇到了问题。

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

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 那么,我做错了什么?我错过了一步吗?或者忘了添加一些东西?

基本上,我只是想让用户将自己的名字写成设置的一部分,这个名称将在主要布局中显示为一个大标题。如果用户可以写一个昵称。它只是一个应用程序必须始终记住的字符串。

感谢您的帮助......

1 个答案:

答案 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的示例。