2016-12-05 120 views
2

我使用这个SwipeToDismissListener关闭列表视图中的项目。Android SwipeToDismiss ListView meuff up项目

http://www.java2s.com/Open-Source/Android_Free_Code/UI/gridview/com_datayumyum_posSwipeDismissListViewTouchListener_java.htm

的解聘工作正常,并返回正确的解雇位置,但后来事情开始变得奇怪我。

在onDismiss,我从我的适配器删除项目:

public void onDismiss(ListView listView, int[] reverseSortedPositions) {     
    for (int i: reverseSortedPositions) { 
       Item item = adapter.getItem(i); 
       adapter.remove(item); 
      } 
} 

的ListView现在redrawed,项目开始看起来像列表中的其他项目(所以A项显示项目的文本B)但如果我实现了一个onClickListener并检查它实际是什么项目,它是正确的,所以它显然是图形问题。

我可以修复这个错误的外观通过调用adapter.notifydatasetchanged 2项独立次点击.... 它不adapter.notifydatasetchanged工作,如果我只是把它一次,或者如果我把它推迟,但自动...

有人有一个想法这里发生了什么?

此外我注意到,我的adapter.getView被称为每个项目多次,如果只有一个重绘应该发生,不知道这是否正常。

回答

0

我自己解决了这个问题。 这只是在ArrayAdapter中视图回收的一个糟糕的实现。 因此,就像提示一样,如果您在运行时从列表中删除元素,请确保在getView中执行View回收的良好实现。