Preference的使用(3) --- 子类的使用

废话不多说,直接上代码:

XML为:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android"
     >
	
    <PreferenceCategory 
        android:title="DialogPreference">
        
        <EditTextPreference android:key="edit0"
            android:title="EditTextPreference"
            android:summary="EditTextPreference summary"/>
        
        <ListPreference 
            android:title="ListPreference"
            android:summary="ListPreference summary"
            android:entries="@array/myentry"
            android:entryValues="@array/myentryvalues"/>
        
         <MultiSelectListPreference android:title="MultiSelectListPreference"
            android:summary="MultiSelectListPreference summary"
            android:entries="@array/myentry"
            android:entryValues="@array/myentryvalues"/>
        
    </PreferenceCategory>
    
    <PreferenceCategory 
        android:title="RingtonePreference">
         <RingtonePreference 
             android:title="RingtonePreference"
             android:summary="RingtonePreference "/>
    </PreferenceCategory>
    
    
    <PreferenceCategory 
        android:title="TwoStatePreference">
        <SwitchPreference 
            android:title="SwitchPreference"
            android:summary="SwitchPreference  summary"
            android:summaryOn="SwitchPreference summaryOn"
            android:summaryOff="SwitchPreference summaryOff"
            android:switchTextOn="SwitchPreference switchTextOn"
            android:switchTextOff="SwitchPreference switchTextOff"/>
        
        <CheckBoxPreference 
             android:title="CheckBoxPreference"
            android:summary="CheckBoxPreference  summary"
            android:summaryOn="CheckBoxPreference summaryOn"
            android:summaryOff="CheckBoxPreference summaryOff"/>
        
    </PreferenceCategory>
</PreferenceScreen>
<string-array name="myentry">
       <item >enrty0</item>
       <item >enrty1</item>
       <item >enrty2</item>
       <item >enrty3</item>
       <item >enrty4</item>
   </string-array>
   
   <string-array name="myentryvalues">
       <item >enrty0_v</item>
       <item >enrty1_v</item>
       <item >enrty2_v</item>
       <item >enrty3_v</item>
       <item >enrty4_v</item>
   </string-array>

现在看一下显示效果

他们的值都是跟sharedPrefernce绑定在一起的,按返回键退出再进来的时候,显示的是上一次的结果。

但是我现在操作的结果却不是的 ,而且在data 下是没有shared_prefs保存

原因是没有设Key值 ,那么值也就没有办法保存状态了。

现在加上Key,再看 ,那么返回  退出再进来是会显示原来的值,看下保存的值

所有要保存值 那么一定要设置Key ,而且从上图可以看出存储的名字跟key有关系,所以请不要重复,如果重复的,那么一个值改变将会影响另一个prefernence的值


1. 先看EdittextPreference的使用

<span style="font-size:18px;">private void findPreference() {
		editTextPreference = (EditTextPreference) findPreference("edit0");
		if (null != editTextPreference){
			editTextPreference.setOnPreferenceClickListener(this);
			editTextPreference.setOnPreferenceChangeListener(this);
		}
	}

	@Override
	public boolean onPreferenceClick(Preference preference) {
		if (preference.getKey().equals("edit0")){
			String contect = ((EditTextPreference)preference).getText();
			Log.i(TAG , "contect = " + contect);
		}
		return false;
	}

	@Override
	public boolean onPreferenceChange(Preference preference, Object newValue) {
		</span><strong><span style="font-size:24px;">if (preference.getKey().equals("edit0")){
			String  temp = (String) newValue;
			((EditTextPreference)preference).setText(temp);
			Log.i(TAG , "onPreferenceChange newValue = " + temp);
		}</span></strong><span style="font-size:18px;">
		
		return false;
	}</span>

onPreferenceClick
  是点击时候的回调, onPreferenceChange 是点击弹出框确定的时候调用的(不管值是否变化)

而且要调用setText 才会把newValue存在 sharedPreference 里


2.ListPreference   点击弹出一个list的对话框的preference,而且是单选的

<span style="background-color: rgb(240, 240, 240);">@SuppressWarnings("deprecation")
	private void findPreference() {
		editTextPreference = (EditTextPreference) findPreference("edit0");
		if (null != editTextPreference){
			editTextPreference.setOnPreferenceClickListener(this);
			editTextPreference.setOnPreferenceChangeListener(this);
		}
		
		listPreference = (ListPreference) findPreference("ListPreference");
		if (null != listPreference){
			listPreference.setOnPreferenceClickListener(this);
			listPreference.setOnPreferenceChangeListener(this);
		}
	}

	@Override
	public boolean onPreferenceClick(Preference preference) {
		String key = preference.getKey();
		if (key.equals("edit0")){
			String contect = ((EditTextPreference)preference).getText();
			Log.i(TAG , "contect = " + contect);
		}else if (key.equals("ListPreference")){
			String entry = (String) listPreference.getEntry();
			String value = (String) listPreference.getValue();
			Log.i(TAG, "entry = " + entry + " value = " + value);
		}
		return false;
	}

	@Override
	public boolean onPreferenceChange(Preference preference, Object newValue) {
		String key = preference.getKey();
		if (key.equals("edit0")){
			String  temp = (String) newValue;
			((EditTextPreference)preference).setText(temp);
			Log.i(TAG , "onPreferenceChange newValue = " + temp);
		}else if (key.equals("ListPreference")){
			</span><span style="background-color: rgb(255, 102, 0);">String  temp = (String) newValue;
			((ListPreference)preference).setValue(temp);
			Log.i(TAG , "onPreferenceChange newValue = " + temp)</span><span style="background-color: rgb(240, 240, 240);">;
		}
		
		return false;
	}</span>
它有一个Entries   还有一个entryValues    前者是显示用的,后者是真正的值

同样要调用setValue 来可以保存到 sharedpreference中(除非是第一次)

可以通过setDefaultValue 来设置默认的值
3. MultiSelectListPreference   是多选的ListPreference

@SuppressLint("NewApi")
	@SuppressWarnings("deprecation")
	private void findPreference() {
		editTextPreference = (EditTextPreference) findPreference("edit0");
		if (null != editTextPreference){
			editTextPreference.setOnPreferenceClickListener(this);
			editTextPreference.setOnPreferenceChangeListener(this);
		}
		
		listPreference = (ListPreference) findPreference("ListPreference");
		if (null != listPreference){
			listPreference.setOnPreferenceClickListener(this);
			listPreference.setOnPreferenceChangeListener(this);
		}
		
		multiSelectListPreference = (MultiSelectListPreference) findPreference("MultiSelectListPreferencekey");
		if (null != multiSelectListPreference){
			multiSelectListPreference.setOnPreferenceClickListener(this);
			multiSelectListPreference.setOnPreferenceChangeListener(this);
			
			
			
		}
	}

	@Override
	public boolean onPreferenceClick(Preference preference) {
		String key = preference.getKey();
		if (key.equals("edit0")){
			String contect = ((EditTextPreference)preference).getText();
			Log.i(TAG , "contect = " + contect);
		}else if (key.equals("ListPreference")){
			String entry = (String) listPreference.getEntry();
			String value = (String) listPreference.getValue();
			Log.i(TAG, "entry = " + entry + " value = " + value);
		}else if (key.equals("MultiSelectListPreferencekey")){
			Set<String> temp = ((MultiSelectListPreference)preference).getValues();
			<span style="color:#ff6600;">Iterator<String>  iterator = temp.iterator();
			while(iterator.hasNext()){
				String item = iterator.next();
				Log.i(TAG , "  valuse : " + item);
			}</span>
		}
		return false;
	}

	@Override
	public boolean onPreferenceChange(Preference preference, Object newValue) {
		String key = preference.getKey();
		if (key.equals("edit0")){
			String  temp = (String) newValue;
			((EditTextPreference)preference).setText(temp);
			Log.i(TAG , "onPreferenceChange newValue = " + temp);
		}else if (key.equals("ListPreference")){
			String  temp = (String) newValue;
			((ListPreference)preference).setValue(temp);
			Log.i(TAG , "onPreferenceChange newValue = " + temp);
		}else if (key.equals("MultiSelectListPreferencekey")){
			Set<String>  temp = (Set<String>) newValue;
			
			<span style="color:#cc0000;">Iterator<String>  iterator = temp.iterator();
			while(iterator.hasNext()){
				String item = iterator.next();
				Log.i(TAG , "newValue  " + item);
			}</span>
			
			((MultiSelectListPreference)preference).setValues(temp);
		}
		
		return false;
	}<strong>
</strong>
 注意的是由于是多选,就不能直接返回一个string  而是一个set<String>  ,使用方法如上

CheckBoxPreference  跟 SwitchPreference 的使用方法 跟上述差不多

看一下API就知道有那功能了:

CheckBoxPreference      下面函数看函数名就知道是啥意思了

setChecked(boolean checked)  isChecked()   

getSummaryOff()   没有check的时候的summary

getSummaryOn()    check的时候的summary

setSummaryOff   setSummaryOff

对于 SwitchPreference 

还有

setSwitchTextOff  setSwitchTextOn  getSwitchTextOff  getSwitchTextOn 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值