将侦听器添加到各个ListPreference项

Tim*_*Tim 2 android event-listener listener android-preferences

我正在尝试将个别侦听器添加到a中的项目中,ListPreference但我找不到正确的代码来执行此操作.

例如,假设我有一个需要设置区域的应用程序 .所以我有ListPreference三个选择; 美洲,亚洲,欧洲.

当我使用触控板滚动项目时,我希望他们在获得焦点时说出偏好的文本.

我确信API中的某个地方我可以为各个项添加一个监听器,但我找不到它.(继承自)中有一个setOnPreferenceClickListener(..)方法,但是当您选择实际的父偏好项时.ListPreferenceDialogPreference

我需要编写一个特殊的子类吗?

编辑

在深入研究之后,我想我需要进一步澄清我的问题.使用首选项时,您可以覆盖中的onPreferenceTreeClick (PreferenceScreen prefScreen, Preference pref)方法PreferenceActivity.这允许您拦截对首选项的任何点击.但是我想在弹出的实际对话框中添加一个监听器.以上例子中的"美洲,亚洲,欧洲"选项.因此,如果我选择或点击亚洲,我可以拦截它.

所以我的(精炼)问题是如何为这些单独的选项添加一个监听器.

干杯

小智 8

final ListPreference list = (ListPreference) preference;
list.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
    public boolean onPreferenceChange(Preference preference, Object newValue) {

        int index = list.findIndexOfValue(newValue.toString());

        if (index != -1) {
            Toast.makeText(getBaseContext(), list.getEntries()[index], Toast.LENGTH_LONG).show();
        }
        return true;
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 这并不能一直解决问题。如果用户单击默认项,则不会调用此更改侦听器。 (2认同)