首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何取消ListPreference点击?

如何取消ListPreference点击?
EN

Stack Overflow用户
提问于 2012-11-20 19:53:33
回答 2查看 301关注 0票数 3

我有3个首选项设置:

  • An EditTextPreference to

a web address

  • An EditTextPreference to enter a port
  • 一个ListPreference用于显示由前两个设置定义的网页中的某些元素(例如http://www.igs-ip.net:2101)。

为了使这变得可行,我想在点击第三个设置时验证web连接。到目前为止,我能够捕捉到动态填充ListPreference的点击:

代码语言:javascript
复制
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对话框。

EN

回答 2

Stack Overflow用户

发布于 2021-09-15 19:18:54

有点晚了,但可能对你们中的一些人仍然有用:

我想OnPreferenceChangeListener可以处理这件事。如果您想接受新值,只需注册一个并返回true;如果您想取消单击,则返回false:

代码语言:javascript
复制
yourPreference.setOnPreferenceChangeListener((preference, newValue) -> {

    if(condition){
        showToast();
        return false;        //cancel the click
    } 
    else return true;        //accept the click
});

参数newValue确定您的首选项的新的潜在值。

票数 0
EN

Stack Overflow用户

发布于 2021-10-26 10:47:25

我其实是在找这个。

但是ChangeListener是在选择了一个新值之后触发的,对吧?

所以它并不是真的取消列表,而这正是我想要的。

我确实找到了一个解决方案,那就是创建一个自定义的ListPreference类,并有条件地处理onClick。这样,如果通过setActive方法将其设置为非活动状态,则在单击该选项后,列表将不会显示。

代码语言:javascript
复制
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();
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13472648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档