Пытаюсь вызвать метод в моей деятельности из фрагмента. Я хочу, чтобы фрагмент дал данные метода и получить данные при возврате метода. Я хочу добиться аналогичного вызова статического метода, но без использования статического, потому что это создает проблемы в деятельности.
Новое для фрагментов, поэтому мне нужно простое и педагогическое объяснение!
Спасибо!
android
android-fragments
Йоаким Эрикссон
источник
источник
Вероятно, вам следует попытаться отделить фрагмент от действия, если вы хотите использовать его где-то еще. Вы можете сделать это, создав интерфейс, который реализует ваша деятельность.
Таким образом, вы бы определили интерфейс следующим образом:
Предположим, например, что вы хотите присвоить активности строку и вернуть целое число:
Это можно определить во фрагменте или в отдельном файле.
Тогда вы бы заставили свою деятельность реализовать интерфейс.
Тогда в вашем фрагменте у вас будет переменная MyStringListener, и вы установите слушателя в методе фрагмента onAttach (Activity activity).
редактировать (17.12.2015):
onAttach(Activity activity) is deprecated, use onAttach(Context context) instead, it works as intended
Первый ответ определенно работает, но он связывает ваш текущий фрагмент с активностью хоста. Рекомендуется не связывать фрагмент с активностью хоста, если вы хотите использовать его с другой активностью.
источник
Для разработчиков Kotlin
Для разработчиков Java
источник
Обновите после того, как я понимаю, как работают фрагменты. Каждый фрагмент принадлежит родительской деятельности. Так что просто используйте:
Изнутри фрагмент. Это лучший ответ, потому что вы избегаете лишних бросков. Если вы не можете избежать бросков с помощью этого решения, используйте приведенный ниже.
============
что вам нужно сделать, это бросить на внешнюю деятельность
создание нового экземпляра приведет в замешательство рамку Android и не сможет ее распознать. смотрите также :
https://stackoverflow.com/a/12014834/1984636
https://stackoverflow.com/a/2042829/1984636
источник
Хотя мне полностью нравится ответ Марко, я думаю, что было бы справедливо отметить, что вы также можете использовать платформу публикации / подписки для достижения того же результата, например, если вы используете шину событий, вы можете сделать следующее
фрагмент:
Деятельность:
источник
В kotlin вы можете вызвать метод деятельности из фрагмента, как показано ниже:
источник
Для доступа к функции, объявленной в вашей Активности через ваш фрагмент, используйте интерфейс, как показано в ответе marco.
Для доступа к функции, объявленной в вашем фрагменте через вашу деятельность, вы можете использовать ее, если у вас нет тега или идентификатора
Это ViewpagerAdapterClass
Этот ответ для таких нубов, как я. Хорошего дня.
источник
Это класс From Fragment ...
Этот код из класса деятельности ...
источник
Я пробовал все методы, показанные в этой теме, и ни один из них не работал для меня, попробуйте этот. Это сработало для меня.
источник
Я искал лучший способ сделать это, так как не каждый метод, который мы хотим вызвать, находится во Fragment с тем же родителем Activity.
В вашем фрагменте
В вашей деятельности
источник
((YourActivityName)getActivity()).functionName();
Пример :
((SessionActivity)getActivity()).changeFragment();
Примечание: имя класса должно быть публично
источник
Где
your_activity
имя вашей деятельности иmethod_name()
имя метода, который вы хотите вызвать.источник
Для Kotlin попробуйте
источник