Android 首选项编辑文本而不是字符串

Android 首选项编辑文本而不是字符串,android,android-edittext,android-preferences,Android,Android Edittext,Android Preferences,所以我的首选项中有EditText,我想获取文本并将其用作字符串。然后每次单击按钮时我都要使用该字符串,它会将我的另一个EditText文本设置为首选项中的字符串。代码: 根据开发者文档,您只需使用edittextpreference.getText().toString() 我不确定您的错误在哪里,所以我只提供执行此操作的代码 SharedPreferences sharedPreferences = PreferenceManager .getDefau

所以我的首选项中有EditText,我想获取文本并将其用作字符串。然后每次单击按钮时我都要使用该字符串,它会将我的另一个EditText文本设置为首选项中的字符串。代码:


根据开发者文档,您只需使用
edittextpreference.getText().toString()


我不确定您的错误在哪里,所以我只提供执行此操作的代码

    SharedPreferences sharedPreferences = PreferenceManager
            .getDefaultSharedPreferences(getBaseContext();

         String string = sharedPreferences
                .getString("key", "default");
根据我的喜好

    <EditTextPreference
        android:defaultValue="default"
        android:key="key"
        android:summary="I'm a summary"
        android:title="I'm a title" />
这个代码有效。如果您的应用程序仍然崩溃,那么您的问题可能是onClick事件或其他问题。我个人更喜欢按钮的onClickListeners

以下是OnClick侦听器的代码

 Button button = (Button)
      findViewById(R.id.button);

 button.setOnClickListener(new OnClickListener() 
 {
     @Override
     public void onClick(View v) 
     {

          //Do some awesome stuff

     }
 });
编辑:约翰在我之前发布了他的答案,他的答案反映了大多数用例,比如在标准的
活动中。我的回答只针对
首选项活动的使用

以下是如何在
首选项活动
中添加
首选项
,并根据另一个
首选项
设置默认值。对不起,如果有任何错误,我正在打电话

您的
XML
定义的
首选项将自动将其值保存到SharedReferences,但创建的代码
首选项
将需要手动保存/持久化

PreferenceActivity
onConfigurationChange()
通常保存代码创建的首选项的状态(嵌套的首选项屏幕有点奇怪。)

当然,您还需要执行空检查(省略以保存我的拇指)

活动\u main.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:title="Preferences"
    android:key="root">
    <EditTextPreference android:title="Default Pref Text"
        android:key="ime"
        android:summary="ime pjesme"
    />
    <Preference android:title="Click to add a preference."
        android:key="add"
        android:summary=""
    />
</PreferenceScreen>

setText(preferences.getString(“ime”、“某物”);使我的应用程序崩溃。。javal.ang.nullpointerExceptionary您确定可以将两个字符串放入setText()方法中吗?如果只在preferences.getString中放入一个,会发生什么情况?getString需要字符串键和字符串定义值。。getstring(字符串键,字符串值);我得到java.lang.NullPointerException错误,这个错误是11-16 22:51:56.209:E/AndroidRuntime(14703):java.lang.IllegalStateException:无法执行ActivitySharedReferences.getString(“ime”,“default”)的方法;始终获取字符串“default”这段代码(SharedReferences.getString(“ime”,“default”);)的作用是在共享首选项中查找名为“ime”的键。如果找不到匹配项,则在本例中使用名为“default”的默认测试。将名称“default”更改为“test”。如果您的值这次出现“test”,那么您的问题是保存首选项而不是检索它。
  EditText editText = (EditText) 
        findViewById(R.id.editText);

  editText.setText(String.valueOf(string));
 Button button = (Button)
      findViewById(R.id.button);

 button.setOnClickListener(new OnClickListener() 
 {
     @Override
     public void onClick(View v) 
     {

          //Do some awesome stuff

     }
 });
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:title="Preferences"
    android:key="root">
    <EditTextPreference android:title="Default Pref Text"
        android:key="ime"
        android:summary="ime pjesme"
    />
    <Preference android:title="Click to add a preference."
        android:key="add"
        android:summary=""
    />
</PreferenceScreen>
public class MyActivity extends PreferenceActivity {
    public void onCreate(Bundle inState) {
        super.onCreate(inState);
        setContentView(R.layout.activity_main);
        getPreferenceScreen.findPreference(PREFERENCE_BUTTON).
          setOnPreferenceClickListener(new OnNewPrefClickListener());
    }
    private class OnNewPrefClickListener implements OnPreferenceClickListener {
        public boolean onPreferenceClick(Preference preference) {
            PreferenceScreen rootScreen = getPreferenceScreen();
            EditTextPreference defaultPref = 
                      (EditTextPreference)rootScreen.findPreference("ime");
            String defaultText = defaultPref.getText();
            EditTextPreference newPref = new EditTextPreference(getApplicationContext());
            newPref.setText(defaultText);
            rootScreen.addPreference(newPref);
            return true;
        }
    }
}