android - 如何取消 ListPreference 点击?

标签 android preferences listpreference

我有 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/

相关文章:

java - 如何从首选项同步 getter 和 setter?

android - 使用 prefs.xml <ListPreference> 进行颜色更改的 Activity 在启动时崩溃

android - 可以更改没有主题的对话框的窗口背景颜色吗?

android - 了解 Android LaunchMode - 防止在应用程序图标单击时重新启动

java - 改造添加带有 token 和 ID 的 header

android - 通过 preferences.xml 中的 Intent 打开应用程序设置

java - addPrefencesFromResource 导致 ClassCastException

android - 如何在用户更改 ListPreference 值之前在 SettingsFragment 中显示确认消息?

android - 如何更改 ListPreference 对话框的外观

android - 如何通过一次安装安装两个应用程序?