В Android-приложении у меня реализован функционал по динамическому добавлению textView в linearLayout, и увеличению высоты этого Layout:
final View view2 = getLayoutInflater().inflate(R.layout.strings_layout, null);
final TextView text = (TextView) view2.findViewById(R.id.txtview);
text.setText(iing.getName());
params.height = params.height + layoutpar;
linear.setLayoutParams(params);
allEds.add(view2);
linear.addView(view2);
На каждом textView висит событие text.setOnClickListener(new View.OnClickListener(), в котором одной из операций является операция получения индекса нажатого textView и сохранения всех view, у которых index меньше данного индекса:
int position=allEds.indexOf(view2);
for (int k=0; k<allEds.size();k++)
{
if (position>k)
{
allEdsdop.add(allEds.get(k));
}
}
После нажатия на textView, получения индекса нажатого textView и копирования view в другой ListArray, происходит набор операций, среди которых происходит удаление всех view с textView, index которых меньше значения position. Удаление происходит таким способом:
linear.removeAllViews();
params.height =0;//обнуляю высоту layout
linear.setLayoutParams(params);
allEds=new ArrayList<View>(); //очищаю весь список view
allEds=allEdsdop; //присваиваю ему значение сохраненных ранее, у которых index меньше postition
for (int k=0; k<allEds.size();k++) //в цикле заново создаю и размещаю textview в layout, и устанавливаю высоту
{
params.height =params.height+layoutpar;
linear.setLayoutParams(params);
linear.addView(allEds.get(k));
}
И кроме этого, после последнего элемента в списке, создается еще один textView и так далее.
Проблема в том, что после первого удаления, когда весь процесс прошел, на экране остался список textView с index меньше position + новый созданный textview, у ВСЕХ textView, которые не были удалены(с index меньше position) пропадает событие text.setOnClickListener(new View.OnClickListener(). Оно есть только у новых textView, которые создаются после удаления и восстановления старых textView. То бишь при нажатии на эти textView не происходит ничего.
Есть ли способ удаления элементов их ArraList<> без создания копий этого ArrayList<> с view, которые не надо удалять и затем обратного создания всех элементов на экране, чтобы событие setOnClickListener не пропадало у них?
Я смотрел, что можно использовать механизм Iterator, но я так и не понял как его использовать в моем случае и как он работает с ArrayList.
Вот способ удаления элементов ArrayList без создания копии элементов и использования Iterator, хитрость в том, чтобы пройтись по листу не с нулевого значения, а с конца, тогда можно построить такой цикл:
for (int i=arrayList.size()-1; i>=0; i--)
{
if (...) {
arrayList.remove(i);
}
}
что позволит удалить нужные значения!
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники