记一个SwipeMenuListView侧滑删除错乱的Bug

来源:互联网 发布:java api安卓版 编辑:程序博客网 时间:2024/05/21 10:19

做侧滑删除网上有很多方案,比如重写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;    }

在此记录下,为大家参考。

0 0