Интересная штука создание элементов динамически, вроде создал пару edittext'ов, а как прочесть с них то что ввел вообще не ясно (: Но ничего сегодня я напишу как их и создавать, и как читать из них, и даже как удалять…
Начнем как обычно с самого начала, а для этого нам понадобиться создать проект, если вы его уже создали тогда хорошо, сейчас мы попробуем динамически создавать edittext при чем кастомный, не просто абы какой.
Заходим в activity_main.xml и вставляем следующий код:
activity_main.xml
Здесь мы вставили layout в который будем создавать наши кастомные edittext'ы и кнопку по нажатию на которую эти edittext'ы будут создаваться. Пока что все просто.
Теперь нам надо создать собственно сам кастомный layout с edittext'ом и кнопкой удаления. Сам этот layout будет выглядеть таким образом:
custom_edittext_layout.xml
В принципе с подготовкой мы окончили, больше леяутов нам пока создавать никаких не надо. Теперь перейдем в коду.
Для начала просто будем создавать кастомную view которую создали ранее, открываем MainActivity.java и пишем следующее:
MainActivity.java
Старался комментировать по максимуму, пока вроде все просто. Здесь мы создаем нужные нам переменные, инициализируем их и вешаем листенеры. Например вот кнопка которая должна добавлять edittext'ы теперь научилась это делать и записывать их в массив. Теперь нам нужно научиться их удалять, для этого повесим листенера на кнопку deleteField.
Приводить весь код не буду, приведу только кусок того что нам нужно что бы удалять их из общего массива.
Тут у нас получается вот какая штука, находим родительский view и удаляем его, и по этому же вью находим параметр в массиве и удаляем его.
Ну а теперь осталось только выводить то что мы вводим в эти edittext'ы, делать мы это будем таким образом, берем данные из allEds засовываем все это в цикл и выводим по тихому, выводить будем в лог что бы не заморачиваться.
Для этого нам потребуется как я раньше сказал создать цикл который будет например по клику на кнопку выводить все что было введено во все динамически созданные edittext'ы. Сперва подредактируем наш activity_main.xml, теперь в нем появилась еще одна кнопка.
По нажатию на которую у нас будет выводиться в лог все что есть в edittext'ах. Теперь код который выводит данные в лог, приведу снова кусок.
Из комментарием думаю все понятно, тут ничего супер сложного нету (:
Если хотите передать эти данные на другую активность то вам достаточно передать переменную items через тот же intent, как-то так:
Ну а на другой активности принять как-то так:
Ну и дальше выводить как хотите его уже (:
Полностью весь MainActivity.java можно посмотреть здесь. Спасибо за внимание.
Исходники
Начнем как обычно с самого начала, а для этого нам понадобиться создать проект, если вы его уже создали тогда хорошо, сейчас мы попробуем динамически создавать edittext при чем кастомный, не просто абы какой.
Заходим в activity_main.xml и вставляем следующий код:
activity_main.xml
Здесь мы вставили layout в который будем создавать наши кастомные edittext'ы и кнопку по нажатию на которую эти edittext'ы будут создаваться. Пока что все просто.
Теперь нам надо создать собственно сам кастомный layout с edittext'ом и кнопкой удаления. Сам этот layout будет выглядеть таким образом:
custom_edittext_layout.xml
В принципе с подготовкой мы окончили, больше леяутов нам пока создавать никаких не надо. Теперь перейдем в коду.
Динамическое создание кастомного layout'a
Для начала просто будем создавать кастомную view которую создали ранее, открываем MainActivity.java и пишем следующее:
MainActivity.java
Старался комментировать по максимуму, пока вроде все просто. Здесь мы создаем нужные нам переменные, инициализируем их и вешаем листенеры. Например вот кнопка которая должна добавлять edittext'ы теперь научилась это делать и записывать их в массив. Теперь нам нужно научиться их удалять, для этого повесим листенера на кнопку deleteField.
Удаление динамически созданных елементов
Приводить весь код не буду, приведу только кусок того что нам нужно что бы удалять их из общего массива.
Тут у нас получается вот какая штука, находим родительский view и удаляем его, и по этому же вью находим параметр в массиве и удаляем его.
Ну а теперь осталось только выводить то что мы вводим в эти edittext'ы, делать мы это будем таким образом, берем данные из allEds засовываем все это в цикл и выводим по тихому, выводить будем в лог что бы не заморачиваться.
Получение введенных данных в динамически созданные view
Для этого нам потребуется как я раньше сказал создать цикл который будет например по клику на кнопку выводить все что было введено во все динамически созданные edittext'ы. Сперва подредактируем наш activity_main.xml, теперь в нем появилась еще одна кнопка.
По нажатию на которую у нас будет выводиться в лог все что есть в edittext'ах. Теперь код который выводит данные в лог, приведу снова кусок.
Из комментарием думаю все понятно, тут ничего супер сложного нету (:
Передача полученных данных на другие активности
Если хотите передать эти данные на другую активность то вам достаточно передать переменную items через тот же intent, как-то так:
Ну а на другой активности принять как-то так:
Ну и дальше выводить как хотите его уже (:
Полностью весь MainActivity.java можно посмотреть здесь. Спасибо за внимание.
Спасибо!
ОтветитьУдалитьПодскажите я динамически добавляю не текстовые поля а ImageView, а как сделать чтоб можно было их перерисовывать
ОтветитьУдалитьнужно заменять их в списке через метод set(position, view)
УдалитьЗдраствуйте, скажите пожалуйста у созданых элементов есть свой id ? тоесть у edittext и у button?
ОтветитьУдалитьне совсем, в данном случае мы работаем с самим объектом, а не с его айди
УдалитьСпасибо автору за статью! Похожего на первых страницах поиска не нашел, однако, мне, как новичку было кое что не ясно. пришлось 2 дня голову ломать. Разобрался только после того как скачал исходник.
ОтветитьУдалитьАвтору +5 к карме!
А напишите статью, как теперь этот ArrayList сохранить, чтобы зайдя снова в приложение он бы сохранялся.
ОтветитьУдалить