记一个SwipeMenuListView侧滑删除错乱的Bug详解手机开发

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

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

记一个SwipeMenuListView侧滑删除错乱的Bug详解手机开发记一个SwipeMenuListView侧滑删除错乱的Bug详解手机开发

那么是什么问题造成的呢,看了一个之前提交的版本(记得之前使用是好的,说明是最近提交的问题,于是发现一个问题,就是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; 
    }

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

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/5537.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论