GridView按位置获取视图,第一个子视图不同

xme*_*men 7 android gridview

Android GridView非常有趣,它重用了子视图.向上滚动的那些从底部返回.因此,没有方法GridView可以通过其位置获取子视图.但我真的需要通过它的立场来看待并做一些工作.因此,要做到这一点,我创建了一个SparseArray,并把意见通过其位置从getViewBaseAdapter.

SparseArray<View> ViewArray = new SparseArray<View>();

public View getView(int position, View convertView, ViewGroup parent) {
    View view = convertView;    
    if (view == null)
       view = li.inflate(layoutID, null);
    ViewArray.put(position, view);
}
Run Code Online (Sandbox Code Playgroud)

现在,我可以通过他们的位置获得所有可见的视图.一切都很完美,但在某些设备中,第一个子视图(位置0)与数组中的视图不同.我登录getView并发现,对于位置0,getView多次调用,每次都使用不同的视图设置数组.我不知道为什么GridView getView多次调用位置0并且只在少数设备上发生.有解决方案吗

xme*_*men 6

在阅读完源代码后getPositionForView,我在自己的GridView中编写了这个方法,完全由API 18完成

public View GetViewByPosition(int position) {
    int firstPosition = this.getFirstVisiblePosition();
    int lastPosition = this.getLastVisiblePosition();

    if ((position < firstPosition) || (position > lastPosition))
        return null;

    return this.getChildAt(position - firstPosition);
}
Run Code Online (Sandbox Code Playgroud)