添加只要是就是调用PreferenceGroup的addPreference(Preference preference)方法 来添加至容器PreferenceGroup。
对于PreferenceActivity的findPreference(key)方法,我们只需要知道key值就可以找到同一xml文件下相应的Preference,勿需考虑层级和嵌套关系

对于PreferenceGroup的removePreference(Preference preference)和removeAll()方法,都是针对某个PreferenceGroup来处理的,所以我们必须考虑层级嵌套关系,可以分为两步:先找到PreferenceGroup和要删除的Preference,再调用PreferenceGroup的removePreference执行删除动作。
首先这是我们的布局
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="key_manage_prefs">
<PreferenceCategory
android:key="key_category"
android:title="PreferenceCategory">
<EditTextPreference
android:key="key_edtprefs"
android:title="EditTextPreference" />
<PreferenceScreen
android:key="key_child_prefscreen"
android:title="Child PreferenceScreen">
<CheckBoxPreference
android:key="key_checkbox"
android:title="CheckBoxPreference" />
</PreferenceScreen>
</PreferenceCategory>
</PreferenceScreen>
测试主体代码
public class MainActivity extends PreferenceActivity {
private Context mContext;
private Preference preference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.test_preference);
//removePreferenceByKey();
mContext=getApplicationContext();
preference=findPreference("key_checkbox_child");//只要是同一个xml文件下的所有Preference都能通过key直接找到
preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Toast.makeText(mContext, String.format("Preference的值为%s", newValue),Toast.LENGTH_LONG).show();
return true;
}
});
preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Toast.makeText(mContext, "Preference Clicked",Toast.LENGTH_LONG).show();
//getFragmentManager().beginTransaction().replace(android.R.id.content,new MainFragment()).commit();
return false;
}
});
}
private void removePreferenceByKey(){
/*PreferenceGroup preferenceGroup=(PreferenceGroup)findPreference("key_category");//先找到PreferenceGroup
Preference preference=findPreference("key_edtprefs");//再找到要删除的Preference*/
/*(PreferenceGroup)findPreference("key_child_prefscreen").removePreference(findPreference("key_checkbox_child"));//执行删除key为key_checkbox_child的Preference**/
getPreferenceScreen().removePreference(findPreference("key_category"));//删除掉key_category及对应节点下的所有节点
//ERROR//getPreferenceScreen().removePreference(findPreference("key_edtprefs"));//无效,因为getPreferenceScreen获得的是当前的顶级容器,而key_edtprefs不是它的直接字节点
////((PreferenceGroup)findPreference("key_category")).removeAll();//仅删除掉key_category下对应Preference节点下的所有子节点
}

这篇文章主要介绍了Preference家族树中顶级成员和次级成员的应用和简单原理的说明,也基本把几乎所有相关的知识点都涉及了,Preference的基本语法都是一样的,区别在于各自不同的特性。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-49635-7.html
我没觉得台湾香港人享受更高品质生活
饮料口味不错
这也是后来的战列舰大战通常采取的战法