Как определить, когда пользователь взаимодействует с фрагментом?

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

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

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

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

Подумайте о Gmail на планшете: в альбомной ориентации папка «Входящие» отображается слева, а первое сообщение-справа. Если я касаюсь другого сообщения, оно отображается справа. Если я повернусь к портрету, он покажет сообщение, которое я выбрал в последний раз.

Если я начну с портрета, он покажет почтовый ящик.

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

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

1 ответ

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

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

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

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