Метод фрагментов onClick в элементе фрагмента - PullRequest
8 голосов
/ 20 декабря 2011

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

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

android:onClick="buttonClicked"

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

public void buttonClicked(View view)  

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

Ответы [ 2 ]

4 голосов
/ 17 января 2012

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

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

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

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

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

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

0 голосов
/ 14 сентября 2013

Ну,

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

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

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

...