我有 3 个偏好设置:
- 用于输入网址的 EditTextPreference
- 用于输入端口的 EditTextPreference
- 一个 ListPreference,用于显示由前两个设置定义的网页中的某些元素(例如 http://www.igs-ip.net:2101)。
为了使其可行,我想在点击第三个设置时验证网络连接。到目前为止,我能够捕捉到动态填充 ListPreference 的点击:
ListPreferenceDynamic dlp = (ListPreferenceDynamic)findPreference(strKey);
dlp.setOnClickListner(new ListPreferenceDynamicOnClickListener()
{
public void onClick(ListPreferenceDynamic preference)
{
String[] astr = astrOpenWebPageAndGetInfo(strAddress, strPort);
if (astr != null)
{
preference.setEntries(astr);
preference.setEntryValues(astr);
}
}
});
我现在的问题是找到一种方法来防止在出现问题时显示 ListPreference 对话框,比方说,与 Internet 地址有关。我只想显示 Toast 来解释问题,而不显示空的 ListPreference 对话框。
最佳答案
有点晚了,但也许对你们中的一些人仍然有用:
我认为 OnPreferenceChangeListener 可以解决这个问题。如果您想接受新值,只需注册一个并返回 true,如果您想取消点击,则返回 false:
yourPreference.setOnPreferenceChangeListener((preference, newValue) -> {
if(condition){
showToast();
return false; //cancel the click
}
else return true; //accept the click
});
参数 newValue 确定您的偏好的新的可能值。
关于android - 如何取消 ListPreference 点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13472648/