У меня есть ListView, и я ввел следующий код, чтобы увидеть процесс getView() моего BaseAdapter.Адаптер ListView getView() получает неправильный элемент
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d("getView()","Fetching Row: " + position);
...
}
Поскольку я медленно прокручиваю свой список, я замечаю что-то странное. Даже когда я нахожусь в позиции списка 40-50, он все равно вызывает getView() с позицией 0-7. Вот то, что мой журнал выглядит следующим образом:
05-14 11:46:13.989: I/getView()(18681): Fetching Row: 45
05-14 11:46:14.039: I/getView()(18681): Fetching Row: 0
05-14 11:46:14.049: I/getView()(18681): Fetching Row: 1
05-14 11:46:14.049: I/getView()(18681): Fetching Row: 2
05-14 11:46:14.049: I/getView()(18681): Fetching Row: 3
05-14 11:46:14.059: I/getView()(18681): Fetching Row: 4
05-14 11:46:14.059: I/getView()(18681): Fetching Row: 5
05-14 11:46:14.059: I/getView()(18681): Fetching Row: 6
05-14 11:46:14.069: I/getView()(18681): Fetching Row: 7
05-14 11:46:14.320: I/getView()(18681): Fetching Row: 46
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 0
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 1
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 2
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 3
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 4
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 5
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 6
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 7
Как вы можете видеть, в между рядами 45 и ряд 46, он называется GetView() для строки 0-7, каждый раз. Это происходит для каждого элемента списка. Я боюсь, что это вызывает проблемы с производительностью.
Почему это происходит? И это нормальное поведение?
Ничего себе, не мог бы подумать, что это так просто. Спасибо за решение! Вы знаете, почему настройка android: layout_height = "wrap_content" заставляет listview делать это? – baekacaek
Макет получает пересчет каждый раз из-за wrap_content. –
О, я вижу. Еще раз спасибо – baekacaek