История моего вопроса в том, что я хотел бы создать меню, аналогичное настройкам «Wifi Networks» на моем Samsung Galaxy S9000.Меню показывает список известных сетей и имеет одну дополнительную запись списка с заголовком «Добавить новую сеть».Если вы щелкните по нему, заполните диалоговое окно и нажмите «ОК», вы получите новый элемент списка.Элемент «Добавить новую сеть» все еще остается после этой процедуры.
Мой подход состоит в том, чтобы иметь PreferenceScreen с одним AdressDialogPreference , который является подклассом DialogPreference .Название этого предпочтения установлено на «Добавить новый IP-адрес».Когда пользователь открывает диалоговое окно и вводит значения, заголовок AddressDialogPreference меняется с «Добавить новый IP-адрес» на значение, введенное пользователем в диалоговом окне, например, «192.168.1.1».
Но теперь мне нужен новый AddressDialogPreference с заголовком «Добавить новый IP-адрес», потому что пользователь может захотеть добавить больше 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 .
Я пытался создать AttributeSet через Xml.asAttributeSet (XmlPullParser) , но я понятия не имею, что передать XmlPullParser .AttributeCount всегда был -1, что явно неверно.Весь подход через парсер кажется мне сложным.
Целевой уровень API - 8.
Выдержка из предпочтений.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>