我有3个首选项设置:
a web address
为了使这变得可行,我想在点击第三个设置时验证web连接。到目前为止,我能够捕捉到动态填充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对话框。我只想显示一个Toast来解释问题,而不显示一个空的ListPreference对话框。
发布于 2021-09-15 19:18:54
有点晚了,但可能对你们中的一些人仍然有用:
我想OnPreferenceChangeListener可以处理这件事。如果您想接受新值,只需注册一个并返回true;如果您想取消单击,则返回false:
yourPreference.setOnPreferenceChangeListener((preference, newValue) -> {
if(condition){
showToast();
return false; //cancel the click
}
else return true; //accept the click
});参数newValue确定您的首选项的新的潜在值。
发布于 2021-10-26 10:47:25
我其实是在找这个。
但是ChangeListener是在选择了一个新值之后触发的,对吧?
所以它并不是真的取消列表,而这正是我想要的。
我确实找到了一个解决方案,那就是创建一个自定义的ListPreference类,并有条件地处理onClick。这样,如果通过setActive方法将其设置为非活动状态,则在单击该选项后,列表将不会显示。
public class CustomListPreference extends ListPreference {
private boolean isActive;
public CustomListPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomListPreference(Context context) {
super(context);
}
public void setActive(boolean isActive) {
this.isActive = isActive;
}
public boolean getActive() {
return this.isActive;
}
@Override
public void onClick() {
if (isActive) super.onClick();
}
}https://stackoverflow.com/questions/13472648
复制相似问题