2013-02-12 1 views
0

Ожидается, что onUserInteraction вызывается для любого взаимодействия с пользователем. он отлично работает в PreferenceActivity. Однако, когда появляется DialogPreference, onUserInteraction больше не вызывается, даже если есть взаимодействие с пользователем, такое как событие касания.onUserInteraction не работает в DialogPreference

Кажется, что DialogPreference - не единственный случай. Когда отображается Dialog, он не сообщает о взаимодействии пользователя с действиями.

Но что мне делать, если мне это действительно нужно. Спасибо.

ответ

4

Насколько я знаю, onUserInteraction() просто не вызывается, когда пользователь взаимодействует с диалоговым окном (даже начато с Activity, в котором вы отслеживаете взаимодействия).

Два решения я знаю, являются:

  • Подкласс Dialog/DialogPreference класс и переопределить dispatchTouchEvent().

  • Реализовать Window.Callback интерфейс и установить его в качестве Dialog сек окна обратного вызова путем выдачи:

    dialog.getWindow().setCallback(callbackImplementation); 
    

    Примечание: эта реализация должна обработать все полученные события, вызвав соответствующие диалоговые методы или обрабатывать события по-своему (например, путем ручного вызова onUserInteraction()).

Редактировать

У вас есть несколько способов, чтобы получить Activity из пользовательского PreferenceDialog экземпляра.

  1. Вызов DialogPreference.getPreferenceManager() метод, который возвращает PreferenceManager. У него есть метод getActivity(), но это пакетно-частный, поэтому вам нужно будет поставить свой заказ DialogPreference в пакет android.preference, чтобы получить к нему доступ.

  2. В PreferenceActivity.onCreate(), после раздувания предпочтений, используйте findPreference(), чтобы найти свой заказ DialogPreference ключом. Затем переведите его в свой собственный класс и установите активность на this через аксессуар.

Я бы пошел со вторым вариантом.

+0

Но как получить прилагаемую активность в DialogPreference? – Bear

+0

@ Смотрите, пожалуйста, отредактируйте :) – andr

+0

Спасибо за ваш ответ. Но есть ли способ расширить DialogPreference таким образом, что мне не нужно устанавливать атрибут каждый раз, когда я его использую? Кажется, что единственный способ - использовать отражение для вызова getActivity в пользовательском подклассе DialogPreference ... – Bear