Как передавать значения android studio
Мы уже работали над созданием перехода между двумя Activity. Сегодняшний урок довольно похож, но имеет некоторое усложнение — мы будем не просто переходить с одного Activity на другое, но и передавать между ними текстовые данные.
Суть приложения будет в том, что в одном окне будет две формы EditView для заполнения текстом и кнопка Button перехода на другое окно, а в другом — два элемента TextView, которые будут отображать текст, который был введен в EditView в первой Activity и кнопка возвращения назад.
Создаем новый проект с Blank Activity, все названия я оставлю по умолчанию.
Для начала настроим интерфейс первого Activity. Открываем файл activity_main.xml. Мы добавим сюда 2 элемента EditText для ввода текста и кнопку Button:
Все, внешний вид первого Activity готов:
Теперь нам нужно создать новый Activity. В папке Java/имя_вашего_приложения нашего приложения создаем новый Java Class. Клик правой кнопкой мышки по указанной папке New — Java Class:
Зададим ему имя Second. Проследите, чтобы созданный класс Second.java находился в одной папке с MainActivity.java :
Для этого класса нужно создать соответствующий layout — файл, который будет отвечать за его внешний вид (интерфейс). В папке res/layout создаем (правый клик по папке layout — New — Layout resourse file) файл по имени second.
Сразу настроим внешний вид второго Activity. Открываем файл созданный second.xml и добавляем 2 элемента TextView и кнопку Button:
Внешне это выглядит так:
В файле activity_main.xml мы создавали кнопку «Передать» и создали для нее метод нажатия (подчеркнуто):
Чтобы описать процесс нажатия, нужно добавить метод обработки нажатия в MainActivity.java. Для этого ставим курсор на слово «Send» в коде кнопки и жмем комбинацию Alt+Enter и выбираем первую строку Create ‘Send(View)’ in ‘MainActivity’.
Переходим к редактированию файла MainActivity.java . Объявляем используемые переменные, привязываем их к созданным элементам интерфейса, с оздаем с помощью класса Intent переход на Second.java, а также настраиваем получение текстовых данных с элементов EditText для передачи в Second.java :
Создадим метод для обработки нажатия кнопки «Назад» в файле second.xml. Делаем все аналогично кнопке «Передать» (курсор на «Back» — Alt+Enter — Enter):
Теперь переходим к редактированию файла Second.java. Для начала нужно привязать его к second.xml интерфейсу:
Теперь объявляем объекты, привязываем их к созданным в файле разметки интерфейса, настраиваем строковые ресурсы с полученных с первого Activity данных и выводим на экран, а также для обработчика нажатия клавиши пишем код перехода обратно:
Остается только объявить о созданном Second.java в файле манифеста. Открываем AndroidManifest.xml и добавим туда между тегами :
Вот и все, приложение готово, можно переходить к тестированию.
Источник
Полный список
— передаем данные с помощью Intent
На прошлых уроках мы узнали, что такое Intent и как им пользоваться. Из одного Activity мы просто вызывали другое, передавая action. Теперь научимся передавать данные. Сделаем простейшее приложение. На первом экране мы будем вводить наше имя и фамилию, а второй экран будет эти данные отображать. Передавать данные будем внутри Intent.
Создадим проект:
Project name: P0281_IntentExtras
Build Target: Android 2.3.3
Application name: IntentExtras
Package name: ru.startandroid.develop.p0281intentextras
Create Activity: MainActivity
Открываем main.xml и рисуем экран с полями и кнопкой отправки:
В EditText будем вводить имя и фамилию, а кнопка Submit будет вызывать другой экран и передавать ему эти данные.
Пишем код для MainActivity.java:
Определяем поля ввода и кнопку. Кнопке присваиваем обработчик – Activity (this). Рассмотрим реализацию метода onClick. Мы создаем Intent с использованием класса, а не action. Если помните, с такого способа мы начинали знакомство с Intent. Напомню — это означает, что система просмотрит манифест файл нашего приложения, и если найдет Activity с таким классом – отобразит его. ViewActivity пока не создан, поэтому код будет подчеркнут красным. Это не мешает нам сохранить файл. Чуть позже мы создадим это Activity и ошибка исчезнет.
Итак, Intent создан, смотрим код дальше. Используется метод putExtra. Он имеет множество вариаций и аналогичен методу put для Map, т.е. добавляет к объекту пару. Первый параметр – это ключ(имя), второй — значение.
Мы поместили в Intent два объекта с именами: fname и lname. fname содержит значение поля etFName, lname – значение поля etLName. Остается только отправить укомплектованный Intent с помощью метода startActivity.
Теперь создадим второе Activity. Назовем его ViewActivity.
Создаем для него layout-файл view.xml:
Здесь просто TextView, который будет отображать пришедшие данные.
Создаем класс ViewActivity. И пишем код:
Находим TextView, затем получаем Intent и извлекаем из него String-объекты с именами fname и lname. Это те самые значения, которые мы помещали в коде MainActivity.java. Формируем строку вывода в TextView с использованием полученных данных.
Не забудьте прописать ViewActivity в манифесте. На этот раз никаких Intent Filter не нужно, т.к. мы точно знаем имя класса Activity и используем явный вызов.
Все сохраним и запустим.
Видим такой экран:
Заполняете поля как пожелаете. Я напишу John в поле First Name и Smith в поле Last Name.
ViewActivity отобразилось, считало данные из Intent и вывело их на экран.
Поместить в Intent можно данные не только типа String. В списке методов Intent можно посмотреть все многообразие типов, которые умеет принимать на вход метод putExtra.
На следующем уроке:
— вызываем Activity с возвратом результата
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник
Как в Android’е передать переменную из фрагмента в активность?
Рассказ о том, как в Android’е передать информацию из фрагмента (Fragment) в активность (Activity). Информация будет полезной для новичков (джуниоров), осваивающих программирование для Android, и вряд ли будет интересной для миддлов и сеньоров.
Запускаем IDE (integrated development environment) Android Studio. Создаём новый проект: File -> New -> New Project. Выбираем «Empty Activity», жмём «Next».
Заполняем поля «Name», «Package name», «Save location».
IDE автоматически создаст два файла: «MainActivity.java» — в каталоге «java/[имя пакета]», «activity_main.xml» — в каталоге «res/layout».
Java-файл определяет, что приложение делает, xml – как оно выглядит. Делает же оно пока совсем мало, только «setContentView(R.layout.activity_main);». Эта строка указывает приложению при запуске использовать макет «activity_main.xml». И, поскольку макет содержит только один виджет типа «TextView» с текстом «Hello World!», то и выглядит наше приложение тоже весьма скромно.
В папке проекта создадим фрагмент с именем «Fragment1».
IDE создаст два файла: «Fragment1» и «fragment_fragment1.xml».
Откроем файл макета фрагмента и удалим ненужный нам виджет «TextView» с приветственной строкой.
Переключимся в режим дизайна и перетащим на макет кнопку (Button).
IDE создаст кнопку с идентификатором «button1».
Теперь отредактируем макет главной активности, т.е. файл «activity_main.xml»
Переместим текстовый виджет повыше и добавим в макет созданный нами фрагмент (для этого нужно перетащить элемент «<>» на макет, выбрать «Fragment1» и кликнуть «OK»).
В макете активности в настройках фрагмента установим layout_height=«wrap_content» и отредактируем на свой вкус его размещение. Также изменим идентификатор текстового поля на «textReport», а фрагмента — на «fragmentWithButton».
Запустим эмулятор (Shift+F10) и посмотрим, что получилось.
Приложение отображает надпись «Hello World!» и кнопку «BUTTON». Надпись выводится из активности, кнопка же принадлежит фрагменту. Кнопка нажимается, но никакого эффекта это пока не даёт. Попробуем запрограммировать надпись отображать количество нажатий кнопки. Для этого нам нужно будет передать сообщение о нажатии кнопки из фрагмента в активность.
Вначале научим фрагмент подсчитывать число нажатий кнопки. Откроем файл «Fragment1.java».
Добавим переменную «counter». В методе «onCreateView», который вызывается сразу после создания фрагмента, создадим «слушатель» кнопки. IDE потребует имплементировать View.OnClickListener — соглашайтесь (Alt + Enter). Создадим (переопределим) метод onClick, который будет увеличивать значение переменной «counter» при каждом клике по кнопке и выводить всплывающее сообщение.
Проверим в эмуляторе (снова Shift+F10), как это работает. Нажатие кнопки приводит к появлению в нижней части экрана приложения всплывающего сообщения «Количество нажатий кнопки: … ».
Отлично, идём дальше. Наша главная цель — передать информацию (в данном случае — число нажатий кнопки) из экземпляра фрагмента в экземпляр активности. Увы, жизненные циклы активностей и фрагментов организованы так, что Android (почти) не позволяет активности и фрагменту общаться напрямую, поэтому нам понадобится посредник-интерфейс. Назовём его «Postman» (почтальон). Интерфейс можно создавать как в отдельном файле, так и в файле с кодом фрагмента; мы выберем первый вариант. Наш интерфейс Postman будет содержать единственный абстрактный (без «тела») метод «fragmentMail».
Переменную «numberOfClicks» мы будем использовать как «конверт» для передачи сообщений от фрагмента в активность.
Откроем файл с кодом активности «MainActivity.java». Как мы помним, он выглядит так:
Имплементируем интерфейс «Postman» и добавим в активность метод интерфейса «fragmentMail», переопределив его (Override).
Теперь, как только активность «увидит» в переменной «numberOfClicks» новое значение, она выведет обновлённое сообщение в текстовом поле «textReport».
Но нам ведь ещё нужно «положить письмо в конверт», т.е. передать в переменную количество кликов по кнопке. А это мы делаем в коде фрагмента. Открываем файл «Fragment1.java».
Д̶о̶б̶а̶в̶л̶я̶е̶м̶ ̶в̶ ̶п̶о̶д̶п̶и̶с̶ь̶ ̶к̶л̶а̶с̶с̶а̶ ̶и̶м̶п̶л̶е̶м̶е̶н̶т̶а̶ц̶и̶ю̶ ̶и̶н̶т̶е̶р̶ф̶е̶й̶с̶а̶ ̶«̶P̶o̶s̶t̶m̶a̶n̶»̶.̶ ̶I̶D̶E̶ ̶п̶о̶т̶р̶е̶б̶у̶е̶т̶ ̶п̶е̶р̶е̶о̶п̶р̶е̶д̶е̶л̶и̶т̶ь̶ ̶м̶е̶т̶о̶д̶ ̶и̶н̶т̶е̶р̶ф̶е̶й̶с̶а̶ ̶«̶f̶r̶a̶g̶m̶e̶n̶t̶M̶a̶i̶l̶»̶,̶ ̶н̶о̶ ̶д̶е̶л̶а̶т̶ь̶ ̶в̶ ̶н̶ё̶м̶ ̶м̶ы̶ ̶н̶и̶ч̶е̶г̶о̶ ̶н̶е̶ ̶б̶у̶д̶е̶м̶,̶ ̶п̶о̶э̶т̶о̶м̶у̶ ̶о̶с̶т̶а̶в̶и̶м̶ ̶е̶г̶о̶ ̶т̶е̶л̶о̶ ̶п̶у̶с̶т̶ы̶м̶. [Удалено, см. «Примечание 1 от 20.04.2019»]
Нам понадобится ссылка на экземпляр активности. Мы получим её при присоединении фрагмента к активности так:
В метод «onClick» (тот самый, который вызывается при нажатии кнопки нашего фрагмента) добавим обращение к интерфейсу из экземпляра активности.
Финальный код фрагмента после удаления (для компактности) комментариев выглядит так:
Теперь наш фрагмент считает количество нажатий кнопки, выводит их во всплывающем сообщении и затем с помощью интерфейса «Postman» передаёт значение переменной-счётчика в переменную numberOfClicks, служащую контейнером-конвертом для пересылки сообщения от фрагмента к активности. Активность, получая новое сообщение, тут же отображает его в своём текстовом поле-виджете с идентификатором «textReport». Цель достигнута!
Источник