如何在ListPreference上设置setOnTouchListener()?

6

处理视图上的onTouchEvent很简单,因为每个视图都有setOnTouchListener()方法来实现这一点。

然而,尽管ListPreference是一个视图,但它没有在布局XML中定义,因此无法通过findViewById()访问。所以...我似乎想不出如何为它设置setOnTouchListener()。

我的想法是在PreferenceActivity的onCreate()中获取对它的引用,然后获取Dialog().getCurrentFocus(),但在那个特定的时刻,它没有焦点,甚至没有对话框(getDialog()返回null,已确认)。

有什么办法可以解决这个问题吗?

1个回答

0
如果您对所有首选项感兴趣,请使用registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener)来处理共享首选项,或者如果您只想知道一个项目的更改,则使用.setOnPreferenceChangeListener(listener)。当首选项更改时,您将收到通知。

1
我担心这对我来说不够用。我并不是真的只对知道偏好何时更改感兴趣(顺便说一下,我已经在实现它了)。我真正想要的是将GestureDetector附加到ListPreference上。有什么办法可以做到这一点吗?谢谢。 - scatmoi
1
你尝试过在首选项视图上执行类似于findViewById(android.R.id.list)的操作吗? - bogdan
1
很不幸,我不能这样做 因为ListPreference不是一个视图。它在XML中定义的,但不是布局XML。那么,我是否没有希望了? - scatmoi
1
是的,但是findViewById()要使用什么id呢?据我所知,ListPreference没有id,因为它不是在布局XML中定义的。你能指出获取ListPreference id的代码吗? - scatmoi
2
android.R.id.list 是整个 PreferenceActivity 视图的 ID,而不是 ListPreference 的ID。另外请注意,一个 PreferenceActivity 可以拥有多个 ListPreference。最后,如果我只想要 PreferenceActivity 视图,已经存在 PreferenceActivity.getListView() 方法可以使用。 - scatmoi
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接