android老知識,我只是忘記了__PreferenceActivity的應用


學了新東西,就忘了新的東西,最近一個頁面用的就是設置界面,繼承的是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啦。)
最后代碼了。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com