在编写自定义ListView实现滑动编辑、删除,双击选中功能的过程中遇到一些2B问题,今后一定不能再犯,特记录如下:
1.在对ListView中item进行更新操作时需要使用getChildAt(index)取子item,index为子item在当前可见项中的索引,而不是所有项中的索引!被这个坑惨了呀,一定要注意。
即取值范围在
ListView.getFirstVisiblePosition() 和ListView.getLastVisiblePosition()之间;
1)所以如果想获取前部的将会出现返回Null值空指针问题;
2)getChildCount跟getCount获取的值将会不一样(数量多时);
3 )如果使用了getChildAt(index).findViewById(...)设置值的话,滚动列表时值就会改变了。
需要使用getFirstVisiblePosition()获得第一个可见的位置,再用当前的position减它获得Index,再用getChildAt取值!即getChildAt(position - ListView.getFirstVisiblePosition())获得相应的ItemView
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
2.实现AdapterView.OnItemClickListener接口中的onItemClick()回调只在单击并弹起item后调用,不能在该回调中记录滑动item的位置,记录滑动item的位置可以在自定义ListView所重写的OnTouchEvent()回调中捕获MotionEvent.ACTION_DOWN事件后,根据用户单击单击客户区坐标点判断item的位置。