Android中提供的Preference可以保存用户的喜好设置。在启明星安卓版员工通讯录里,有一个地方保存用户输入的URL就是用的Preference。
但是Preference默认显示的是Summary的值。我们希望他们可以显示用户输入的只。
先看一下效果:
如果用户未输入,这Summary提示让用户输入
如果用户输入了,这显示用户的输入值
要实现上面的功能,
(1)增加XML配置文件
<EditTextPreference android:key="url" android:title="please enter url" > </EditTextPreference>
(2)执行OnSharedPreferenceChangeListener 接口
public class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener { private EditTextPreference url; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.c21preference); url = (EditTextPreference)getPreferenceScreen().findPreference("url"); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { /* get preference */ if(key.equals("url")) { InitTextSummary(); } } public void InitTextSummary() { if(url.getText().equals("")) { url.setSummary("请输入接口地址,例如 http://demo.dotnetcms.org/worklog/"); } else { url.setSummary(url.getText()); } } @Override public void onResume() { super.onResume(); InitTextSummary(); getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } @Override public void onPause() { getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); super.onPause(); }
如此即可。
(3)获取用户的配置值
public void Read(View view){
// SharedPreferences settings = getSharedPreferences("c21preference", MODE_PRIVATE);
// String txt=settings.getString("ringtone", "xxx");
// Toast.makeText(getApplicationContext(),txt, Toast.LENGTH_SHORT).show();
SharedPreferences settings=PreferenceManager.getDefaultSharedPreferences(this);
String txt=settings.getString("url", "xxx");
Toast.makeText(getApplicationContext(),txt, Toast.LENGTH_SHORT).show();
}