我的问题的背景是我想创建一个菜单,就像我的三星Galaxy S9000上的“Wifi Networks”设置一样。该菜单显示已知网络列表,并有一个标题为“添加新网络”的附加列表条目。如果单击它,请填写对话框并单击“确定”,您将获得一个新的列表项。此过程后,“添加新网络”项仍然存在。
我的方法是使用一个 AdressDialogPreference 来创建 PreferenceScreen ,这是 DialogPreference 的子类。此首选项的标题设置为“添加新IP地址”。当用户打开对话框并输入值时, AddressDialogPreference 的标题从“添加新IP地址”变为用户在对话框中输入的值,例如“192.168.1.1”。
但是现在我需要一个标题为“添加新IP地址”的新 AddressDialogPreference ,因为用户可能想要添加更多的IP地址。那就是我被困住的地方。我尝试了以下方法:
@Override
protected void onDialogClosed(boolean positiveResult) {
if(!positiveResult)
return;
(...)
PreferenceScreen ps = (PreferenceScreen)pm.findPreference("validIPs");
ps.addPreference(new AddressDialogPreference(getContext(), attr ));
}
但我不知道在哪里可以获得/创建一个合适的 AttributeSet ( attr 参数)。我不能在没有 AttributeSet 的情况下编写构造函数,因为基类 DialogPreference 需要 AttributeSet 。
我尝试通过 Xml.asAttributeSet(XmlPullParser)创建一个AttributeSet,但我不知道要向 XmlPullParser 提供什么。 attributeCount始终为-1,这显然是错误的。通过解析器的整个方法在我看来很复杂。
目标API级别为8。
摘自preferences.xml:
<PreferenceScreen android:title="@string/validIPsHeadline"
android:summary="@string/validIPsSummary"
android:dependency="restrictIPs"
android:key="validIPs">
<com.websliders.preferences.AddressDialogPreference
android:title="@string/defaultIPHeadline"
android:summary="@string/defaultIPSummary" />
</PreferenceScreen>
答案 0 :(得分:0)
我不确定这是否相关,但这是我将一个AttributeSet加载到SeekBarPreference(来自http://android.hlidskialf.com/blog/code/android-seekbar-preference)的方式,它也是从DialogPreference类派生的。
在PreferenceActivity中:
public PreferenceScreen getPreferenceScreen(String title, String summary) {
// Root
PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);
PreferenceCategory inlinePrefCat = new PreferenceCategory(this);
inlinePrefCat.setTitle("DNA");
root.addPreference(inlinePrefCat);
//This is where you load the AttributeSet
//from the res/layouts/seekbarpreference_layout.xml file
Preference editTextPref;
Resources resources = this.getResources();
XmlPullParser parser = resources.getXml(R.layout.seekbarpreference_layout);
AttributeSet attributes = Xml.asAttributeSet(parser);
editTextPref = new SeekBarPreference(this, attributes);
editTextPref.setKey(title);
editTextPref.setTitle(title);
editTextPref.setSummary(summary);
//editTextPref.setText(text)
inlinePrefCat.addPreference(editTextPref);
return root;
}
这是“res / layouts / seekbarpreference_layout.xml”文件:
<?xml version="1.0" encoding="utf-8"?>
<com.hlidskialf.android.preference.SeekBarPreference
xmlns:android="http://schemas.android.com/apk/res/android"
android:key="duration"
android:title="Duration of something"
android:summary="How long something will last"
android:dialogMessage="Something duration"
android:defaultValue="5"
android:text=" minutes"
android:max="60"
/>
如果它不适合你,也许你缺少XML文件中的必需属性?