2014-07-14 63 views
0

我有一个Listview和一个自定义适配器,我试图改变交换两个ArrayList中的按钮作为列表视图项的apdapter项。 我的代码是交换ArrayList里面的两个元素在自定义适配器内显示在列表视图

viewHolder.btnUp.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Integer pos = (Integer) v.getTag(); 

      if (!pojos.get(pos).equals(pojos.get(0))) { 

       Collections.swap(pojos, pos, pos - 1); 

       notifyDataSetChanged(); 
      } 
     } 
    }); 

但我不能看到列表视图的变化,虽然ArrayList中已经修改,但用户界面的变化也没有体现出来。

+0

我会检查两件事情。 1.您正在使用作为适配器数据源的数组列表“pojos”。 2.我想你可能需要调用notifyDataSetChaged()以在UI线程上运行。 –

回答

0

这是因为您的适配器已完成其工作。适配器将数据转换为视图并将这些视图传递给列表视图。请注意,更改原始集合中的顺序不会更改列表视图内的视图。你可以做的是删除视图并将它们添加到正确的位置。通过做viewHolder.getParent()访问列表视图

+0

它看起来不错,所以我如何删除视图,并再次添加它们在适配器内? – SAR

+0

不在适配器内 – committedandroider

+0

调用项目上的getParent()以获得对列表视图的引用,然后执行removeViewAt(position) – committedandroider

0

如果pojos是本地最终变量,请确保适配器使用的变量仍指向相同的集合,否则匿名类将交换未使用的集合中的2个元素。

+0

pojos是我传递给适配器的数据集,所以它不是本地和最终的。这与每个列表项中的复选框相同,其中复选框反映了这些更改,但这不起作用。我已经尝试runOnUIThread也但没有工作 – SAR

0

我建议再次将arrayList传递给适配器,并将适配器设置为列表视图,所有这些都在notifyDataSetChanged();方法之前。

相关问题