2012-02-11 82 views
0

晚上好StackOverflow列表查看重複行動

這次我正在與ListView包含TextViews戰鬥。

我添加了一個OnItemClick監聽器。

v.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      TextView tvItm = (TextView) arg1; 
      int Col = tvItm.getTextColors().getDefaultColor(); 
      if (Col == Color.WHITE) 
       tvItm.setTextColor(Color.GREEN); 
      else 
       tvItm.setTextColor(Color.WHITE); 
     } 
    }); 

正如你可以看到我切換文本的顏色,它的作品。但是,它可以在幾個項目的時間,即使我只點擊一個項目。所以當我點擊第一個項目時,它會變成綠色,然後是六個白色項目,第七個項目是綠色的,但我從未點擊過第七個項目!

物品1 - 點擊 - 綠色
ITEM2 - 不點擊 - 白
項目3 - 不點擊 - 白
ITEM4 - 不點擊 - 白
ITEM5 - 不點擊 - 白
ITEM6 - 不點擊 - 白
item7 - 不點擊 - 綠色
item8 - 不點擊 - 白
item9 - 不點擊 - 白
等..

該模式繼續爲所有列表。

此外,如果我快速地上下滑動列表,則模式會上下移動1到2個項目。

以下是截圖: List Problem

第一張圖片:什麼都不做
2圖像:我點擊 'AK Kusine'
第三圖像:我向下滾動,「艾倫馬爾卡'也被改變了。

如果我在監聽器中設置了一個斷點,它只會在列表中每次點擊一次就停止。 是什麼導致了這種行爲?更重要的是,我該如何解決它?

回答

1

這是因爲getView方法會回收您的視圖以優化性能。 實現您的適配器getView(int position, View convertView, ViewGroup parent)方法(所以你需要擴展一個適配器)的方式,它得到了convertView並使其根據位置綠色或白色..

關注this了詳細的解釋。它可能看起來很長,但它非常有用。

+0

的確是一個有用的視頻,並幫助解決問題:) – f2lollpll 2012-02-11 23:30:03

0

這可能是由於重繪ListView時發生了某些事情。一般情況下,這是如果你只是在爲你的數據設置某些種類標誌指示它應該是綠色的更好,然後在你的ListView.getView()你有這樣的事情

if(listItem.isGreen()) 
    view.setColor(Color.GREEN); 
0

我相信它,因爲android重新使用listview中的視圖來最大限度地減少內存佔用。當您選擇列表中顯示的第一個項目時,其textview設置爲綠色,但是當您滾動列表並且第一個項目不可見時,實際上它會再次作爲第七個項目出現,並且仍將其文本設置爲綠色。爲了避免這種情況,你可以簡單地(默認)設置你的TextView以白色在適配器的getView,並希望它應該工作

+0

我會考慮這是否正確以及。感謝您的回答。雖然C.d提供了一個非常有用的鏈接;) – f2lollpll 2012-02-11 23:31:51