adapter的getview(int position, View convertView, ViewGroup parent)的缓存比较多,比如一页可以显示8个,0-7。那么向下滑动2个之后在getview只会有position8,和9,说明其他的调用的其他的缓存,如果按照一般拖动的实现,应该将上一次的图像生成个bitmap,具体还要看看源代码吧,还有convertView是否为null的规律
Item item;
if(convertView == null) {
Log.d(TAG, "position>>"+position+">>convertivew null");
FrameLayout layout = new FrameLayout(TestAdapterPosition.this);
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT, 60);
TextView tt = new TextView(TestAdapterPosition.this);
layout.addView(tt, lp);
convertView = layout;
item = new Item();
item.t = tt;
convertView.setTag(item);
}else{
Log.d(TAG, "position>>"+position+">>convertivew is not null");
item = (Item) convertView.getTag();
}
TODO
///--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
说一下一个需求的解决,自绘的tab共有一个listview,要求每个tab记住listview已经scrolly位置,tab切回来的时候要还原位置。
从listview中取得adapter item的position好像比较方便,但是想随意取出对应position的view,从mListview.getSelectedView()靠谱,mAdapter.getView(int position, View convertView, ViewGroup parent)应该是对应的,但是位置都显示为0,最后mListview.getChildAt(0)计算偏移位置位置,配合mListview.getFirstVisiblePosition()记住position。还有一直没太搞懂这个适配器模式,我认为getchildAt()在listview不太好使呢,这里要注意的是getChildAt(0),它的0是从第一个可视的开始算,总共也就可视的那几个,超过了就返回为null了。代码如下:
Rect rect = new Rect();
if(mListview.getChildAt(0) != null) {
mListview.getChildAt(0).getHitRect(rect);
}
mTabScrollY[tab] = rect.top;
mTabPosition[tab] = mListview.getFirstVisiblePosition();
在tab切回来的时候重新定位
mListview.setSelectionFromTop(mTabPostion[tab], mTabScrollY[tab]);