2014-03-26 55 views
8

我已经回到了第四,并且我无法得到它。我正在使用首选项片段设置我的设置。我可以使设置生效,甚至可以在更改时更新“摘要”。但是,如果我离开设置屏幕并回到它,摘要将回到默认文本。所以问题是,在使用edittext首选项时。你如何更新总结,以显示用户改变设置,并使其关闭屏幕和应用程序?在这种情况下,当我的用户更改mse_ip时,总结更改为“MSE IP x.x.x.x”,但一旦离开设置屏幕并返回,它就会回到@ string/mseip设置为的“0.0.0.0”。如何设置edittext首选项摘要并让其粘贴

的preferences.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">  
    <EditTextPreference 
      android:key="mse_ip" 
      android:title="MSE IP" 
      android:summary="@string/mseip" 
      android:defaultValue="0.0.0.0" 
      android:dialogTitle="IP Address for mse" /> 
    <EditTextPreference 
      android:key="mse_username" 
      android:title="Username" 
      android:summary="MSE Username %s" 
      android:defaultValue="Admin" 
      android:dialogTitle="Username for mse" /> 
    <EditTextPreference 
      android:key="mse_password" 
      android:title="MSE Password" 
      android:password="true" 
      android:summary="******" 
      android:defaultValue="Admin" 
      android:dialogTitle="Password for mse" /> 
</PreferenceScreen> 

preferencesfragment

package com.hmkcode.android; 

import android.content.SharedPreferences; 
import android.content.SharedPreferences.OnSharedPreferenceChangeListener; 
import android.os.Bundle; 
import android.preference.EditTextPreference; 
import android.preference.ListPreference; 
import android.preference.Preference; 
import android.preference.PreferenceFragment; 

/*public class PrefsFragment extends PreferenceFragment { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

    // Load the preferences from an XML resource 
     addPreferencesFromResource(R.xml.preferences); 
} 
} */ 
public class PrefsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Load the preferences from an XML resource 
    addPreferencesFromResource(R.xml.preferences); 

    // set texts correctly 
    onSharedPreferenceChanged(null, ""); 

} 

@Override 
public void onResume() { 
    super.onResume(); 
    // Set up a listener whenever a key changes 
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    // Set up a listener whenever a key changes 
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); 
} 

@Override 
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 

    updatePreference(key); } 
    private void updatePreference(String key){ 
      if (key.equals("mse_ip")){ 
       Preference preference = findPreference(key); 
       if (preference instanceof EditTextPreference){ 
        EditTextPreference editTextPreference = (EditTextPreference)preference; 
        if (editTextPreference.getText().trim().length() > 0){ 
         editTextPreference.setSummary("MSE IP " + editTextPreference.getText()); 
        }else{ 
         editTextPreference.setSummary("MSE IP Not"); 
        } 
       } 
      } 
     } 

} 

setpreferenceactivity

import android.os.Bundle; 
import android.app.Activity; 

public class SetPreferenceActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getFragmentManager().beginTransaction().replace(android.R.id.content, 
      new PrefsFragment()).commit(); 

    //setContentView(R.layout.activity_set_preference); 
} 
} 

回答

0

看来你刚刚更新的EditText的值。尝试通过调用

sharedPreferences.edit().putString(key, editTextPreference.getText()).apply();

这可以在updatePreference(String key)函数调用存储在共享偏好的新值。

2

您必须将OnPreferenceChangeListener设置为您的首选项。因此,在 每个首选项更改,调用setSummary,更改摘要显示。这可能是一个 示例代码:

final Preference pref = getPreferenceManager().findPreference(
       PREF_KEY); 
pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

      @Override 
      public boolean onPreferenceChange(Preference preference, Object newValue) { 
       pref.setSummary(newValue.toString()); 
       return true; 
      } 
     }); 

你也应该调用的onCreate您喜欢的setSummary()的方法, 让摘要显示您的sharedPreference值。

相关问题