Как установить OnTouchListener() в ListPreference?

Обработка onTouchEvent в представлении проста, так как каждое представление имеет метод setOnTouchListener(), который делает именно это.

Увы, хотя ListPreference является представлением, оно не определено в макета XML, поэтому к нему нельзя получить доступ через findViewById(). Итак... Кажется, я не понимаю, как установить для него setOnTouchListener().

Моя идея заключалась в том, чтобы получить ссылку на него в onCreate() PreferenceActivity, а затем в getDialog().getCurrentFocus(), но в этот конкретный момент времени у него нет ни фокуса, ни даже диалога (getDialog() возвращает значение null, подтверждено).

Любая идея, как обойти это?


person scatmoi    schedule 19.06.2013    source источник


Ответы (1)


Используйте registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) для общих настроек, если вас интересуют все настройки, или .setOnPreferenceChangeListener(listener), если вы хотите узнать об изменениях только одного элемента. Вы будете уведомлены, когда предпочтения будут изменены.

person bogdan    schedule 19.06.2013
comment
Боюсь, мне это не подойдет. Мне не очень интересно знать только, когда предпочтения изменились (кстати, я уже реализую это). Чего я действительно хочу, так это присоединить GestureDetector к ListPreference. Есть ли способ сделать это? Спасибо. - person scatmoi; 19.06.2013
comment
Вы пытались сделать что-то вроде findViewById(android.R.id.list) в представлении предпочтений? - person bogdan; 19.06.2013
comment
К сожалению, я не могу этого сделать, потому что ListPreference не является представлением. Он определен в XML, но не в макете XML. Мне не повезло? - person scatmoi; 19.06.2013
comment
вы определяете его внутри xml, но используете его из фрагмента или из действия. ListPreference используется для создания представления после этого, поэтому в конце концов это будет представление. - person bogdan; 20.06.2013
comment
Да, но какой идентификатор использовать для findViewById()? Насколько мне известно, у ListPreference нет идентификатора, потому что он не определен в макете XML. Можете ли вы на самом деле указать код, который получает идентификатор ListPreference? - person scatmoi; 21.06.2013
comment
если вы используете listPreference внутри PreferenceActivity, используйте findViewById(android.R.id.list), если вы находитесь внутри фрагмента, внутри метода onViewCreated(), вы можете сделать view.findViewById(android.R.id.list) - person bogdan; 21.06.2013
comment
android.R.id.list — это идентификатор всего представления PreferenceActivity, а не ListPreference. Также обратите внимание, что PreferenceActivity может иметь более одного ListPreferences... Наконец, если все, что мне действительно нужно, это представление PreferenceActivity, то уже есть PreferenceActivity.getListView() - person scatmoi; 22.06.2013