Android:在列表视图中禁用按钮

时间:2012-03-17 14:40:55

标签: android android-listview

我在listview项目中添加了一个按钮,单击该按钮后,我希望该按钮被禁用。我在自定义适配器中使用了下面的setOnClickListener作为我的按钮,但问题是当我点击一个按钮时,另一个列表项的按钮也将被禁用。例如,当我单击项目1的按钮时,项目1的按钮然后被禁用,但是项目4的按钮也将同时被禁用,尽管我没有点击它。 而且,当我向上和向下滚动时,所有项目的按钮只是随机启用和禁用。 任何人都知道为什么会这样?

   holder.viewBtn.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        holder.viewBtn.setEnabled(false);
                        showInfo();                 
                    }           });

2 个答案:

答案 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提交错误报告