Фрагменты метода onClick в фрагменте

Я прочитал несколько статей о фрагментах, но я все еще смущен тем, как что-то делать.

У меня есть MainActivity, который отображает два фрагмента бок о бок. В одном из фрагментов у меня есть кнопка и определяется в макете фрагментов XML для кнопки

android:onClick="buttonClicked" 

Теперь я хочу реализовать этот метод

 public void buttonClicked(View view) 

Я бы предположил, что это должно быть реализовано в FragmentA.java, а не в MainActivity.java. Но он работает только в том случае, если этот метод реализован в MainActivity.java. Почему это? Для меня это не имеет смысла. Pre Honeycomb метод, принадлежащий одному активству, остался в этой активности, теперь на планшете я объединяю многие действия в одну MainActivity, и все разные методы объединяются? Что бы вы ни делали, например, в FragmentA.java? Что делать, если вы должны запустить свою собственную деятельность, потому что это приложение работает на карманном компьютере, тогда метод onClick не должен находиться в MainActivity, а в Activity, который нужно вызвать тогда. На данный момент я довольно смущен …

Solutions Collecting From Web of "Фрагменты метода onClick в фрагменте"

Я не уверен, какова конкретная проблема, но, возможно, это поможет.

Из документации для Android по Fragment s:

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

То есть, вы никогда не должны манипулировать фрагментом из другого фрагмента; Скорее, это должно быть сделано через основную деятельность. Прочтите раздел «Создание обратных вызовов событий для активности» в этой статье для получения дополнительной информации (это важно!).

С другой стороны, если вы хотите, чтобы кнопка выполняла действие внутри самого Fragment (т. Е. Если вы хотите, чтобы Button кнопку, чтобы изменить текст TextView внутри фрагмента), вы должны реализовать это во Fragment , а не в Activity ( Это связано с тем, что полученное поведение содержится в Fragment и не имеет ничего общего с родительской Activity ).

Оставьте комментарий, и я могу уточнить, запутан ли мой пост … Я только недавно начал понимать самого Fragment :).

Что ж,

Я предполагаю, что это связано с иерархией структуры контекста android. Активность – это хост всех дочерних представлений, и, следовательно, вы можете сказать, что фрагмент фактически использует контекст своего хоста. И поэтому, когда вы используете onClick с системой фрагментов, он всегда ищет ее в активности хоста фрагмента.

Проверьте его. Описание разработчика Android onClick

Я не проверял одну вещь, но вы можете поставить тест. Предоставляя реализацию в хост-активности, а не в фрагменте, но используйте onClick в файле макета фрагмента. Он должен вызывать метод родителя.