Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Почему при выполнении OnItemClickListner выдает ошибку?

#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. Если нет - поясните вопрос и скиньте стэктрейс ошибки

Комментариев нет:

Отправить комментарий