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

Android GridView非常有趣,它重用了子视图.向上滚动的那些从底部返回.因此,GridView没有任何方法可以通过其位置获取子视图.但我真的需要通过它的立场来看待并做一些工作.所以要做到这一点,我创建了一个SparseArray并根据它们在BaseAdapter的getView中的位置放置了视图.
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);
}

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

解决方法

在阅读了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);
}

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...