`

Android的数据存储之SharedPreferences2——使用PreferenceActivity实现设置界面

 
阅读更多

PreferenceActivity是Activity的子类,可以方便的实现设置界面。

PreferenceActivity会通过一个xml配置文件来描述设置界面,并且系统会自动保存当前设置的最后状态。

 

使用步骤:

1、编写一个类继承自PreferenceActivity的子类。

   

//默认会把key-value 存储在 包.xml中。再次访问Activity时,也是默认从 包.xml中读取
addPreferencesFromResource(R.xml.pref);

 

2、在res/xml目录中建立一个用于描述设置界面的xml文件

   a,新建一个xml目录

   b,新建一个pref.xml   

   

 

 c、创建如下结果的文件

 


 
  显示结果如下:

 
       

 
 重新进入后保存了之前设置的值,因为PreferenceActivity中,会默认读取 包.xml 来设置默认值。

 

问题一:可否修改PreferenceActivity保存数据的文件名。

答:PreferenceActivity内部使用了SharedPreferences对象保存数据,默认存储路径和文件名都和后者相同,路径是:shared_prefs/包.xml .

getPreferenceManager().setSharedPreferencesName("setting");

上述方法修改默认的文件名为 setting.xml 但是需要注意的是,文件名修改后,重新访问这个Activity的时候不会自动读取setting.xml中的文件。因为默认读取的是 包.xml 这个文件,故建议不修改。

 

问题二: 上面案例中的EditTextPreference 中,填写用户名后点击确定,页面摘要地方不显示输入内容。

 

public class MainActivity3 extends PreferenceActivity {
	SharedPreferences pref;
	EditTextPreference etp, etp_phone;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		addPreferencesFromResource(R.xml.pref);
//		getPreferenceManager().setSharedPreferencesName("setting");
		try {
			etp = (EditTextPreference) findPreference("individual_name");
			etp.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
				@Override
				public boolean onPreferenceChange(Preference preference,
						Object newValue) {
					preference.setSummary(newValue.toString());
					return true; // 是否写入xml
				}
			});

			etp_phone = (EditTextPreference) findPreference("mobile");
			etp_phone
					.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
						@Override
						public boolean onPreferenceChange(
								Preference preference, Object newValue) {
							preference.setSummary(newValue.toString());
							return true;
						}
					});

			ListPreference list = (ListPreference) findPreference("list_sort");
			// OnSharedPreferenceChanged监听事件必须进行注册
			list.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
				@Override
				public boolean onPreferenceChange(Preference preference,
						Object newValue) {
					String[] ss = getResources().getStringArray(
							R.array.pref_entries);
					preference.setSummary("Current value is "
							+ ss[Integer.parseInt(newValue.toString()) - 1]);
					return true;// 是否写入xml
				}
			});

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

 说明:本文参照李宁老师的《Android高薪之路》

  • 大小: 32.7 KB
  • 大小: 89.8 KB
  • 大小: 53.6 KB
  • 大小: 54.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics