#android #android_fragment
Задумывалось, что в LinearLayout при клике по элементу listner будет отображаться разные разметки XML. Но выдает ошибку, из-за box.removeViewAt(box.getChildCount()); Здесь: box=(LinearLayout) findViewById(R.id.LinearLayoutBox); View view0 = getLayoutInflater().inflate(R.layout.info, null); box.addView(view0); listV.setAdapter(setAdapter); listV.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int position, long id) { switch (position){ case 0: box.removeViewAt(box.getChildCount()); View view1 = getLayoutInflater().inflate(R.layout.info_about_world, null); box.addView(view1); break; Почему и как исправить?
Ответы
Ответ 1
Метод View#removeViewAt(int indexOfChildInParent) ожидает получить порядковый номер представления для удаления. Вы же ему передаёте кол-во представлений в нём, которое больше индекса последнего добавленного элемента, т.к. индексы с 0 начинаются. Т.е. вам надо так писать для удаления последнего добавленного элемента: box.removeViewAt(box.getChildCount() -1);Ответ 2
box.getChildCount() возвращает количество элементов в box. То есть, например, если их 2 - возвращает 2 (ваш кэп). При этом сами child нумеруются 0 и 1, а вы, например, пытаетесь удалить child 2. Если по вашей задумке код должен удалять последний добавленный view, сделайте box.getChildCount()-1. Если нет - поясните вопрос и скиньте стэктрейс ошибки
Комментариев нет:
Отправить комментарий