2015-06-22 154 views
1

好吧,我已經能夠在ListView中高亮顯示一個項目,但它最終會突出顯示每個第四項。我很確定這是因爲回收。然後我有問題,在滾動後突出顯示的項目會恢復正常,這也是因爲回收。有沒有辦法讓它突出顯示,或者可能停止ListView的回收?突出顯示選定的ListView項目

這是代碼的樣子現在...

runTimes.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> list, View v, int pos, long id) {  
       v.setSelected(true); 

     } 
    }); 

這就是突出顯示的項目恢復到正常的滾動後的代碼。

+0

是否有可能在您的ListView數據來自哪裏的地方有一個突出顯示的變量?然後在你的適配器中,你可以突出顯示變量是否爲真?這將有助於回收問題 –

回答

1

如果你想停止回收ListView你應該再想一想,如果你真的需要ListView

但是,要正確使用ListView完成此操作,您需要將突出顯示的項目狀態保存在適配器內。然後在getView根據他們的位置突出顯示項目。

已經有很多關於保存ListView項目狀態的問題,我相信你可以找到一些。

2

要高亮一排,你根本不應觸摸視圖。你應該使用列表視圖setItemChecked和選擇器作爲你的視圖的背景。

runTimes.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> list, View v, int pos, long id) {  
       runTimes.setItemChecked(pos,true); 

     } 
    }); 

你還需要確保你跟蹤的最後位置的選定,這樣當你選擇一個新的

0

我最終找到了另一個問題,幫助我弄清楚如何,你可以取消它去做吧。這就是我所做的。在OnClickListener中,我檢查是否有被按下的東西。如果之前沒有按下過,則將視圖背景顏色和prevRunView設置爲視圖。如果以前按過某些東西,則將先前的視圖背景顏色更改爲白色。在那之後,我做了和以前一樣的事情,但是對於不同的觀點。

if(runIndex == -1){ 
       runIndex = pos; 
       v.setBackgroundColor(Color.parseColor("#A6A6A8")); 
       prevRunView = v; 
      }else{ 
       prevRunView.setBackgroundColor(Color.parseColor("#FFFFFF")); 
       runIndex = pos; 
       v.setBackgroundColor(Color.parseColor("#A6A6A8")); 
       prevRunView = v; 
      } 

在我的適配器中,我編寫了這個代碼,所以它看起來不像是回收。

if(ScoreActivity.runIndex == position) 
     v.setBackgroundColor(Color.parseColor("#A6A6A8")); 
    else 
     v.setBackgroundColor(Color.parseColor("#FFFFFF"));