#android
Вопрос:
У меня есть ListView, который работает с шаблонами пользовательских элементов.
Внутри шаблона элемента списка находятся ImageViews (используемые в качестве кнопок) и несколько строк. Данные привязаны к CustomAdapter.
Я хочу делать определенные вещи внутри ListView с каждым элементом при нажатии на разные ImageViews.
Я родом из .NET и WebDevelopment и очень новое в Android.
Как я могу добиться проверки того, какая кнопка или изображение, в котором был нажат ListItem.
Обычно я бы дал каждому элементу в пользовательском атрибуте ListItem с уникальным идентификатором, включая ключ из элемента данных, и получил этот ключ в событии нажатия кнопки и так далее.
Есть ли какое-либо мнение о том, чтобы присвоить ImageView пользовательский атрибут типа ‘MyCustomID’ и получить его в событии щелчка из него? Или каков обычный рабочий процесс для подобной ситуации: ListItems с повторяющимися элементами и проверка того, какой ListItem принадлежит выбранному элементу внутри.
Пожалуйста, помогите!
Комментарии:
1. поскольку есть ответ, я могу дать рекомендацию о хороших методах, поскольку вы новичок в Android; используйте RecyclerView вместо ListView и ImageButton вместо ImageView в качестве кнопки.
Ответ №1:
Попробуйте с этим
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// position is the index of clicked item.
}
});
Комментарии:
1. Большое спасибо. Но при такой реализации каждый элемент в ListView запускает это событие, не так ли? Мне нужны разные методы для разных элементов внутри ListItem
Ответ №2:
Прежде всего, я бы рекомендовал перейти на RecyclerView. Он более производительный, гибкий и простой в использовании. Здесь вы можете проверить, как это сделать.
О вашем вопросе: я точно не помню, как реализовать ListView, но я полагаю, что у вас есть адаптер. В этом адаптере вы создаете представление своих элементов. Итак, что вы можете сделать, это создать интерфейс прослушивателя, который получает информацию о ваших элементах. Что-то вроде:
interface OnImageItemClickListener {
fun onImageClicked(imageInfo: ImageInfo)
}
data class ImageInfo(
val id: Long,
val uri: URI,
)
Затем вы можете передать реализацию этого интерфейса своему адаптеру, а затем использовать его в View.setOnClickListener
методе:
class CustomAdapter(
private val listener: OnImageItemClickListener,
private val info: List<ImageInfo>,
) : ... {
override getView(position: Int, convertView: View, parent: ViewGroup): View {
// Inflate your view...
view.setOnClickListener {
listener.onImageClicked(info[position])
}
}
}
Опять же, я настоятельно рекомендую перейти на RecyclerView. Если вы это реализуете, вам придется выполнить те же шаги.
Комментарии:
1. Спасибо за ваш совет с RecyclerView, я собираюсь изменить это и попробовать ваш подход