У меня есть собственный класс ListView (подкласс из ListView), и мне нужно, чтобы он добавил небольшой отступ к нижней части конечного элемента представления, чтобы он не перекрывался маленькой полосой, которая расположена в нижней части экрана. , Я хочу делать это только тогда, когда дочерние представления растут за пределами видимой области списка. Я пытаюсь использовать этот код для достижения этого:
@Override
protected void onLayout (boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
// If there are hidden listview items we need to add a small padding to the last one so that it
// partially hidden by the bottom sliding drawer handle
if (this.getLastVisiblePosition() - this.getFirstVisiblePosition() + 1 > this.getCount()) {
LinearLayout v2 = (LinearLayout) this.getChildAt(this.getCount() - 1);
v2.setPadding(v2.getPaddingLeft(), v2.getPaddingTop(), v2.getPaddingRight(),
v2.getPaddingBottom() + 5);
}
}
Однако значения, возвращаемые getLastVisiblePostion (), getFirstVisiblePostion () и getCount (), не отражают то, что адаптер пока содержит. Я предполагаю, что это потому, что Адаптер еще не уведомил ListView о данных, но я не могу понять, откуда ListView фактически знает о данных и, следовательно, имеет правильные значения. Этот код выполняется при загрузке Activity.
В какой момент процесса рендеринга у меня будет доступ к этим данным? Я также должен сказать, что я использую AsyncTask для загрузки данных из базы данных, а затем создаю там Адаптер и добавляю его в представление списка. Есть ли событие, которое я могу использовать в ListView, которое будет срабатывать, когда адаптер добавляет данные / заставляет представление списка отображать новые элементы?