Как изменить элемент ListView в Android?

Я начинаю изучать Android и хочу знать, есть ли в Android какая-либо опция, позволяющая изменять каждый элемент или представление (я не знаю, как именно он называется, я имею в виду каждый из элементов из списка ArrayList, который вы показываете в представление списка).

Что ж, я создал ListView, который будет отображать некоторые книги, расположенные в списке ArrayList с именем «книги».

Я сделал собственный адаптер, который я связываю с ListView, чтобы отображать каждый элемент с соответствующим макетом в приложении. У меня также есть класс «книга» для каждого элемента, который будет отображаться в ListView.

Далее я сделал Intent, который я вызываю из MainActivity с помощью startForActivityResult(), который я обрабатываю в классе Book и который я возвращаю в MainActivity со всеми данными книги с помощью метода setResult и получаю информацию с помощью onActivityResult() и requestCode.

Поэтому у меня нет проблем с добавлением элементов в ListView, просто у меня возникают проблемы, если я хочу изменить некоторые элементы (или представления), расположенные в ListView (например, если у меня есть заголовок и автор книга, если я поставлю неверную информацию, я хочу иметь возможность изменить ее).

У меня есть это, в тот же момент, когда вы нажимаете на некоторые элементы ListView, будет отображаться новый макет для изменения информации о том, что это неправильно, поэтому я использую метод setOnItemClickListener с событием onItemClick в пользовательском адаптере, который я создал ранее . Здесь я вызываю новый Intent для изменения неправильной информации с помощью метода startActivityForResult().

Я сделал то же самое, что и раньше, чтобы добавить новый элемент, но вместо добавления нового элемента с помощью custom_adapter.addBook(название,автор) я хочу знать, есть ли какая-то возможность сделать что-то вроде этого: custom_adapter.modify(название,автор) ) или custom_adapter.update(title,author), я имею в виду, когда вы изменили все неправильные элементы книги (например, EditText, который был «названием»), и у вас есть вся информация в классе MainActivity (потому что вы вернули его с помощью setResult), как снова поместить его в тот же элемент, обновив его в custom_adapter, а также в ArrayList.

Я искал его в Интернете, но ничего не нашел.

Извините, если у меня плохой английский, но я ожидаю, что его можно понять.

Большое спасибо!


person Francisco Romero    schedule 14.02.2015    source источник
comment
В основном вы удаляете или добавляете элементы через адаптер. Я также публикую ответ.   -  person The Original Android    schedule 14.02.2015


Ответы (3)


Если я правильно понимаю вашу проблему, вы можете просто изменить ArrayList типа Book, который поддерживает ваш ArrayAdapter.

Итак, если вы знаете, какой Book объект вы хотите изменить, вы можете просто внести изменения в сам объект Book. Пока этот Book является ссылкой на тот же объект, который вы изначально добавили к ArrayList, с которым вы создали экземпляр ArrayAdapter, вы можете затем вызвать custom_adapter.notifyDataSetChanged(), чтобы сказать адаптеру перерисовать свои дочерние представления с новыми данными.

person bdnwang    schedule 14.02.2015
comment
Ну, может быть, я не совсем правильно объяснил. Что я хочу сделать, так это то, что после того, как я установил все свои элементы в ListView, если я хочу изменить один из них, я щелкаю по нему, и появляется новый макет. В этом макете будет 2 EditText с заголовком и автором нашей книги со старой информацией, когда я меняю ее и нажимаю кнопку «Отправить», я сожалею об этой информации в MainActivity. Я пытался использовать custom_adapter.notifyDataSetChanged(), но я не знаю, как сделать точную ссылку на элемент, который я нажал, поэтому у меня есть информация, но я не знаю, как обновить их в пользовательском адаптере как ArrayList. Спасибо - person Francisco Romero; 14.02.2015
comment
Ах, хорошо, вы пытались передать позицию выбранного элемента намерению при запуске действия, а затем вернуть ту же позицию с результатом действия. Затем вы изменяете книгу в заданной позиции в адаптере. Надеюсь, это сработает. - person bdnwang; 14.02.2015

В Интернете есть несколько хороших примеров кода, но вы должны понимать код для своих целей. Итак... для начала посмотрите Использование ArrayAdapter с Просмотр списка. В коде показано использование ArrayAdapter с методом getView(). И я надеюсь, что это показывает, как определить слушателей, которые вам нужны.

Как насчет этого для начала? Веселиться...

person The Original Android    schedule 14.02.2015

Большое спасибо за всю помощь, которую вы мне оказали. Я очень доволен тобой. :)

Наконец, я просто отправляю информацию с Bundle, когда я начал Intent, также с позицией. И после этого я просто использовал эту позицию, чтобы установить новую информацию для своих предметов (в моем случае, книг).

Еще раз большое спасибо ;)

person Francisco Romero    schedule 16.02.2015