2016-09-30 5 views
0

Когда на экране есть несколько фрагментов, как узнать, когда пользователь взаимодействует ЛЮБЫМ способом с помощью одного из фрагментов? Возможно, они нажимают кнопку, прокручивают список, вставляют поля в полях, что угодно.Как узнать, когда пользователь взаимодействует с фрагментом?

Я подумал, что, возможно, я получаю прослушиватель onClick/onTouch/onFocusChanged на фрагменте/FrameLayout, содержащем макет фрагмента/корня интерфейса фрагмента, но они не срабатывают.

Я попробую установить различные ручные триггеры, например, «если пользователь нажмет эту кнопку или прокрутит это представление или это поле получит фокус, тогда пользователь взаимодействует с этим фрагментом», но, очевидно, это более сложный и сильно подверженный к неточному поведению.

Не знаете, зачем мне это нужно? Вот пример использования:

Подумайте о Gmail на планшете: в ландшафте слева отображается первое сообщение справа и первое сообщение справа. Если я нажимаю другое сообщение, оно отображается справа. Если я повернусь к портрету, он покажет сообщение, которое я выбрал последним.

Если я начну с портрета, он отобразит папку «Входящие».

Теперь вот трюк: скажем, я начинаю в ландшафте, показывая входящие слева, первое сообщение справа. Если я немедленно поверну устройство к портрету. Но если я взаимодействую с панелью справа (скажем, прокручивая сообщение электронной почты), а затем поверните устройство, оно покажет это первое сообщение. Gmail догадывается, был ли я больше заинтересован в почтовом ящике или в электронной почте и показал это.

Мой вызов делает что-то подобное в приложении. Когда я поворачиваюсь из пейзажа (показывая две панели) к портрету (показывая одну панель), я не уверен, показывать ли представление списка или подробное представление по умолчанию. Если бы я мог сказать, взаимодействовал ли пользователь с детальным представлением каким-то образом (с помощью клавиатуры или сенсорного экрана), то я знаю, чтобы показать это.

+0

Вы пробовали это: http://stackoverflow.com/questions/21882251/how-to-handle-touch-events-on-a-fragment? Если ваш фрагмент не получает событие, это означает, что другой вид перехватывает его. –

+0

Да, я пробовал onTouchListener в корневом макете. Он не срабатывает. –

ответ

0

В конце концов, я не мог найти хороший, чистый способ работать с этим.

Вместо этого для каждого отдельного способа пользователь мог взаимодействовать с фрагментом - касаясь ListView, нажав кнопку и т. Д. - я бы отключил сообщение для Activity (используя интерфейс Listener, который реализует Activity, курс).

Затем активность отслеживает, взаимодействовал ли пользователь с фрагментом по умолчанию, следя за тем, чтобы сохранить и восстановить это значение.

Это грязно, но это все, что я мог придумать. :/

Смежные вопросы