学了新东西,就忘了新的东西,最近一个页面用的就是设置界面,继承的是PreferenceActivity,好久没用,都不知道他们写的什么了,现在写个dome记录一下。
PreferenceActivity看名有一半就是Preference有关的,而android保存常用简单参数都会用到sharePreference,对的这个PreferenceActivity就是用来保存用户输入的参数的。使用sharePreference我们还要getEditor(),commit()。这货你直接画个界面,剩下的啥都不用管了。如下图:
你改变数据之后,出来再进去,发现数据还是上次的那样,比较牛逼了,对于一般的设置界面,还是比较好的啊。
看看Activity吧:
public class SecondActivity extends PreferenceActivity{
ListPreference name ;
ListPreference city ;
EditTextPreference input_key ;
MultiSelectListPreference multi_list ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.second_preference);
name = (ListPreference) findPreference("name");
name.setSummary(name.getValue());
name.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
name.setSummary(name.getValue());
//返回true,表示name中保存的数据会更新
return true;
}
});
city = (ListPreference) findPreference("city");
city.setSummary(city.getValue());
city.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
city.setSummary(city.getValue());
return true ;
}
});
input_key = (EditTextPreference) findPreference("input_key");
input_key.setSummary(input_key.getText().toString());
input_key.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
input_key.setSummary(newValue.toString());
return true;
}
});
multi_list = (MultiSelectListPreference) findPreference("multi_list");
multi_list.setSummary(multi_list.getValues().toString());
multi_list.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
multi_list.setSummary(newValue.toString());
return true ;
}
});
}
}
这里没有啥setContentView了,存在一个 addPreferencesFromResource(R.xml.second_preference);second_preference是res资源文件夹下的一个xml文件夹的文件:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<!--list列表-->
<PreferenceCategory android:title="选择">
<ListPreference
android:summary="tom"
android:defaultValue="1"
android:dialogTitle="名称选择"
android:entries="@array/name_choose"
android:entryValues="@array/name_value"
android:key="name"
android:title="名称选择"/>
<ListPreference
android:summary="武汉"
android:defaultValue="3"
android:dialogTitle="城市选择"
android:entries="@array/city_name"
android:entryValues="@array/city_value"
android:key="city"
android:title="城市选择"/>
</PreferenceCategory>
<CheckBoxPreference
android:defaultValue="1"
android:key="sex"
android:summary="this is the inner text"
android:title="性别">
</CheckBoxPreference>
<EditTextPreference
android:key="input_key"
android:summary="{text}"
android:text="zhangsan"
android:title="editText"/>
<MultiSelectListPreference
android:entries="@array/city_name"
android:entryValues="@array/city_value"
android:key="multi_list"
android:summary="multi choose"
android:title="multi_list"/>
<PreferenceCategory android:title="高级">
<PreferenceScreen android:title="关于">
<intent android:targetClass="com.testpreferences.MainActivity"/>
</PreferenceScreen>
</PreferenceCategory>
</PreferenceScreen>
arrays.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="name_choose" >
<item>tom</item>
<item>steven</item>
<item>jerry</item>
</string-array>
<string-array name="name_value" >
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
<string-array name="city_name" >
<item>武汉</item>
<item>上海</item>
<item>北京</item>
<item>深圳</item>
</string-array>
<string-array name="city_value">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
</string-array>
</resources>
具体的代码就这样,也挺简单,结合dome基本上能懂summary,defaultValue,dialogTitle,entries,entryValues,key(相当于id的作用,你都看到了findPreference啦。)
最后代码了。