2012-03-17 59 views
0

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

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

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

回答

2

当我第一次遇到这个问题时,我非常沮丧!

这里的问题是,listview只是不记得按钮的状态。不知道,如果它是一个错误,但无论如何,我需要一个出路,这就是我所做的。

我相信你正在使用一个自定义适配器与一个视图。意味着你在正确的道路上。您需要保留一个大小等于列表中项目数的布尔值数组。在你的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

这发生,因为ListView以错误的方式重用View秒。要么实施你自己的ListAdapter没有View重用或提交谷歌的错误报告