欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发中记一个SwipeMenuListView侧滑删除错乱的Bug

程序员文章站 2024-03-04 23:59:00
做侧滑删除网上有很多方案,比如重写listview实现滑动的监听,今天说下一个swipelistview,这个是之前一个朋友在网上开源的一个封装组件,能够适用于多种情况,项...

做侧滑删除网上有很多方案,比如重写listview实现滑动的监听,今天说下一个swipelistview,这个是之前一个朋友在网上开源的一个封装组件,能够适用于多种情况,项目地址:https://github.com/baoyongzhang/swipemenulistview,我也采用了拿来主义直接拿来用了。

但是在调试运行的滑动删除数据的时候,却出现了一个问题,删除位置错乱,删除的第一个数据,却删除了最后一个,于是找问题呗,我首先用listview试了下,数据是没有问题的,那么说明是删除的时候删除的控件对位置的计算错误了,先上两张效果图。

那么是什么问题造成的呢,看了一个之前提交的版本(记得之前使用是好的,说明是最近提交的问题,于是发现一个问题,就是swipemenuadapter这个类的getview方法较之前多了一个判断,为了缓存加的,尝试的心态将判断条件去掉,再运行了下,好了,这里贴出部分代码。

public view getview(int position, view convertview, viewgroup parent) { 
swipemenulayout layout = null; 
// if (convertview == null) { 
view contentview = madapter.getview(position, convertview, parent); 
swipemenu menu = new swipemenu(mcontext); 
menu.setviewtype(getitemviewtype(position)); 
createmenu(menu); 
swipemenuview menuview = new swipemenuview(menu, 
(swipemenulistview) parent); 
menuview.setonswipeitemclicklistener(this); 
swipemenulistview listview = (swipemenulistview) parent; 
layout = new swipemenulayout(contentview, menuview, 
listview.getcloseinterpolator(), 
listview.getopeninterpolator()); 
layout.setposition(position); 
// } else { 
// layout = (swipemenulayout) convertview; 
// layout.closemenu(); 
// layout.setposition(position); 
//// view view = madapter.getview(position, layout.getcontentview(), 
//// parent); 
// } 
if (madapter instanceof baseswiplistadapter) { 
boolean swipenable = (((baseswiplistadapter) madapter).getswipenablebyposition(position)); 
layout.setswipenable(swipenable); 
} 
return layout; 
} 

以上所述是小编给大家介绍的android开发中记一个swipemenulistview侧滑删除错乱的bug,希望对大家有所帮助