【发布时间】:2013-10-02 21:05:26
【问题描述】:
假设我有一个包含 145 个项目的适配器。目前在我的 Listview 中显示了 10 个视图,其中视图代表项目 104 到 113。现在我有一个 scrollListener,其 onScroll 方法是
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
{
View view = getViewForPosition(??, view);//keep reading for ?? details
}
如果我需要我的 firstVisibleItem 的视图,适配器是项目 104,我如何从列表中请求它?我说listview.getChildAt(0)?还是说listview.getChildAt(104)?
现在实际上我正在使用以下方法,但基本问题仍然存在。
public View getViewForPosition(int position, AbsListView listview) {
int firstPosition = listview.getFirstVisiblePosition()
- ((ListView) listview).getHeaderViewsCount();
int wantedChild = position - firstPosition;
// Say, first visible position is 8, you want position 10, wantedChild will now be 2
// So that means your view is child #2 in the ViewGroup:
if (wantedChild < 0 || wantedChild >= listview.getChildCount()) {
return null;
}
return listview.getChildAt(wantedChild);
}
【问题讨论】:
-
我认为一个更好的问题是,为什么需要来自 onScroll 方法的视图?并不是说没有理由,但通常大多数您想做的事情都可以对视图执行,您可以(并且应该)在
getView()方法中执行。 -
@kcoppock 我很高兴你问:stackoverflow.com/questions/19041222/…
标签: android android-layout android-listview android-arrayadapter