关于adapter的getView的position问题

来源:互联网 发布:金融大数据刷新 编辑:程序博客网 时间:2024/05/26 08:42

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]);






原创粉丝点击