Как удалить программно созданный View?
Хочу сделать приложение "список покупок". При нажатии на кнопку "Добавить" в LinearLayout добавляю новый LinearLayout с текстом(EditText) (название покупки) и кнопкой "Del":
Но я не знаю, как удалить теперь эти элементы при нажатии кнопки Del. Ведь при создании элементов я не задавала ID и, как я поняла, ID можно задать только целочисленным. И нужно кнопки Del тоже отличать одну от другой. Подскажите пожалуйста, как это лучше реализовать. В крайнем случае можно было бы задавать целым числом(по-моему, я видела метод для удаления по ID), но мне кажется, это неправильно.
Как удалить динамически созданные виды при нажатии кнопки
Я написал приведенный выше код для динамического создания текстовых полей и кнопок; Но теперь мне нужно удалить 2 текстовых поля и кнопку при нажатии кнопки. Как я могу это сделать?
Ответы (6)
Попробуйте следующий код.
Пояснение
- Здесь сначала возьмите «GrandParent» любого представления.
- Затем возьмите его «Родительский» вид
- Со ссылкой на «GrandParent» удалите это «Родительское» представление.
- это удалит все представления, которые содержит этот «Родитель». Согласно вашему коду, ваш «ll» будет здесь «linearChild». И «ly» здесь будет «linearParent». Таким образом, весь «ll» будет удален из «ly», который вы добавили динамически.
я думаю, вы должны использовать этот метод на своем LinearLayout:
сначала вы звоните:
затем вызовите метод удаления представления:
и чтобы удалить все представления, которые находятся в LinearLayout, выполните следующие действия:
и дайте мне обратную связь
Надеюсь, это поможет .
Если вы хотите навсегда удалить созданные представления.
Если вы не хотите навсегда удалять созданные вами представления.
Поэтому используйте соответствующую строку кода, которую вы хотите.
ИЗМЕНИТЬ:
Используйте этот код для вашей ситуации:
вы можете просто использовать qty.setVisibility(View.GONE) на onClickListener() кнопки по вашему выбору. так.
Преимущество использования View.GONE заключается в том, что вы можете вернуть представление, если хотите, но layout.removeView(qty) удалит представление навсегда, и вам придется снова добавить представление.
[EDIT] 1. изменено на View.GONE вместо View.INVISIBLE по причинам, объясненным здесь
Надеюсь, я ответил на ваш вопрос. 🙂
просто используйте индекс, для которого вы хотите удалить свой вид из линейного макета
если вы снова хотите это представление, вы можете вызвать addViewAt() таким же образом.
Чтобы удалить динамически созданные EditTexts
Я написал код для создания динамического EditText. Теперь я хочу удалить из него собственный EditText, например, в контактах в Android. Как добиться этой функциональности? Ниже моего кода, показывающего imgaddress, есть кнопка, по нажатию которой я добавляю представление, т.е. editText и imageview отменяются сейчас при нажатии кнопки отмены. Я хочу удалить editText.
Вы пытаетесь вставить imageView и editText и удалить editText по клику imgaddess? — kamil
да точно такой же функционал я хочу — user2318272
Итак, какой editText вы хотите удалить при нажатии imgaddess? Текст редактирования, который вы добавили с этим адресом изображения? — kamil
По приведенному выше коду я получаю один EditText и Exact перед ним, одно изображение для удаления, поэтому при щелчке этого изображения соответствующий editText должен быть удален — user2318272
Просто опубликуйте мой ответ, пожалуйста, проверьте — kamil
4 ответы
Я обычно использую editText.setVisibility(EditText.GONE); и
editText = null; должен собирать мусор.
ответ дан 25 апр.
да, это можно сделать, но моя проблема в том, как получить динамический EditText — user2318272
конечно, вам нужно будет сохранить ссылку на ваши элементы управления EditText в каком-то массиве/списке массивов. Вы можете сделать это в своем методе editText. — Пиюш-Спроси любую разницу
Я сохранил его в массиве, но мы не знаем, какой пользователь editText хочет удалить, поэтому, нажав на эту кнопку изображения, как его удалить — user2318272
Разве позиция edittext/ImageButton в вашем списке EditText не будет соответствовать индексу этого конкретного EditText в массиве. Поскольку у меня нет доступа к вашему коду, вам нужно будет найти способ, с помощью которого можно получить текущую позицию/индекс нажатой кнопки ImageButton. Как только вы это получите, идите и удалите Edittext, соответствующий этой позиции/индексу, из ArrayList. — Пиюш-Спроси любую разницу
Добавить и удалить представления в Android динамически?
Как добавить и удалить такие виды, как TextView из приложения Android, например, на исходном экране контактов Android, на котором вы нажимаете небольшой значок в правой части поля, и добавляет или удаляет поле, состоящее из TextView и editTextView (из того, что я вижу).
Любые примеры того, как достичь этого?
10 ответов
От этот поток от разработчиков android-разработчиков, это означает, что ViewParent и ViewGroup вообще не могут удалять представления. Вам нужно отдать своего родителя в макет (если это макет), чтобы выполнить то, что вы хотите.
Мне нужна точная функция, описанная в этом вопросе. Вот мое решение и исходный код: https://github.com/laoyang/android-dynamic-views. И здесь вы можете увидеть видео-демонстрацию: http://www.youtube.com/watch?v=4HeqyG6FDhQ
Layout
В основном вы создадите два файла макета xml:
- Горизонтальное представление строки LinearLayout с TextEdit , a Spinner и ImageButton для удаления.
- Вертикальный контейнер LinearLayout с помощью кнопки Добавить.
Control
В коде Java вы добавляете и удаляете представления строк в контейнере динамически, используя inflate, addView, removeView и т.д. Существует некоторый контроль видимости для лучшего UX в Android-приложении на складе. Вам нужно добавить TextWatcher для представления EditText в каждой строке: когда текст пуст, вам нужно скрыть кнопку Добавить новую и кнопку удаления. В моем коде я написал вспомогательную функцию void inflateEditRow(String) для всей логики.
Другие трюки
- Установите android:animateLayoutChanges=»true» в xml для включения анимации
- Используйте настраиваемый прозрачный фон с помощью нажатого селектора, чтобы кнопки были визуально такими же, как кнопки в Android-приложении на складе.
Исходный код
Java-код основного действия (это объясняет всю логику, но довольно много свойств заданы в файлах макета xml, пожалуйста, обратитесь к источнику Github для полного решения):