2012-03-17 22 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重用或提交谷歌的錯誤報告