我正在尝试为ListPreference
中的项添加单个侦听器,但我找不到合适的代码来执行此操作。
例如,假设我有一个需要设置 region 的应用程序。所以我有一个ListPreference
有三个选项;美洲,亚洲,欧洲。
当我使用触控板滚动项目时,我希望他们在获得焦点时说出偏好的文本。
我确信在API的某处我可以为各个项添加一个监听器,但我找不到它。
setOnPreferenceClickListener(..)
中有一个ListPreference
方法(继承自DialogPreference
),但是当您选择实际的父偏好项时。
我是否需要编写一个特殊的子类?
修改
在进一步研究之后,我想我需要进一步澄清我的问题。
使用偏好设置时,您可以覆盖onPreferenceTreeClick (PreferenceScreen prefScreen, Preference pref)
中的PreferenceActivity
方法。这允许您拦截对首选项的任何点击。但是我想在弹出的实际对话框中添加一个监听器。以上例子中的“美洲,亚洲,欧洲”选项。因此,如果我选择或点击亚洲,我可以拦截它。
所以我的(精炼)问题是如何为这些单独的选项添加一个监听器。
欢呼声
答案 0 :(得分: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;
}
});
答案 1 :(得分:2)
在sharedPref值更改后,当persistent = true时调用OnSharedPreferenceChangeListener,但是对于每个项目,您实际上可以分配自己的OnPreferenceChangeListener,并且在那里您可以看到单击了哪个项目
ListPreference pLocAuto = (ListPreference) findPreference(PREF_LOC_AUTO);
pUpdateAuto.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
System.out.print(newValue.toString());
return false;
}
});
答案 2 :(得分:0)
我认为stackoverflow上的另一篇文章与此类似:Custom Row in a ListPreference。
在这一个中,子类化是解决方案。但在您的情况下,您可以使用简单的ListAdapter
。
如果您已设置适配器,则可以使用方法onItemClick
并在方法内部使用switch
语句(case
是数组中的id或索引或类似的东西)调用不同的方法。
我希望我理解你的问题......:)
啊!您还需要查看onFocusChange
Listener。您可以将此侦听器添加到每个首选项(必须是视图;您在适配器中添加侦听器),然后在侦听器方法中添加已声明的switch语句。
问候,我希望我可以提供一些提示,
儒略