我在listview项目中添加了一个按钮,单击该按钮后,我希望该按钮被禁用。我在自定义适配器中使用了下面的setOnClickListener作为我的按钮,但问题是当我点击一个按钮时,另一个列表项的按钮也将被禁用。例如,当我单击项目1的按钮时,项目1的按钮然后被禁用,但是项目4的按钮也将同时被禁用,尽管我没有点击它。 而且,当我向上和向下滚动时,所有项目的按钮只是随机启用和禁用。 任何人都知道为什么会这样?
holder.viewBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.viewBtn.setEnabled(false);
showInfo();
} });
答案 0 :(得分:2)
当我第一次遇到这个问题时,我感到非常沮丧!
这里的问题是listview只是不记得按钮的状态。 Dunno,如果它是一个bug,但无论如何我需要一个出路,这就是我做的。
我相信您正在使用带有视图的自定义适配器。意味着你走在正确的道路上。您需要保留一组布尔值,其大小等于列表中的项目数。在btnClick()
中设置数组中项目的状态。
现在每次滚动或执行使列表重绘的内容时,都会调用getView()
。在您的getView()
中检查项目状态并启用/禁用它。还有一件事,请务必同时执行if{}
和else{}
检查。
if(checked){
holder.viewBtn.setEnabled(false);
}else{
holder.viewBtn.setEnabled(true);
}
如果你不这样做,你会看到奇怪的行为。如果您使用
,还有一件事if(convertview == null){
//create the holder
}else{
convertview = getTag();
}
方法,确保在上述步骤后填充状态。
我还没有看到你的实现,但我必须在项目中弹出一个按钮,然后使用它从列表中删除该项目。因此,我必须特别注意维持国家。
一旦基础数据发生变化,请注意状态。
对于长篇文章感到抱歉,但问题是:(
我找到了一个基本format
中包含解决方案的链接答案 1 :(得分:1)
这种情况正在发生,因为ListView
以错误的方式重用了View
。要么在没有ListAdapter
重用的情况下实施您自己的View
,要么向Google提交错误报告