2011-01-13 51 views
1

我有一個包含項目的列表,有些項目可以處於「已查看」狀態。我希望那些項目有不同的背景顏色,然後休息。我的列表中的某個項目的顏色不同

列表視圖基本上有一個單一的選擇器爲整個列表,設置一個背景顏色的項目之一,防止不會做的伎倆,因爲選擇器被繪製在我的項目的佈局下作爲背景,並指望他們是透明的。

有沒有一種方法可以爲列表定義多個選擇器?如果沒有,是否有可能創建一個具有額外狀態的選擇器?基本上所有我想要的是常規列表選擇器加上一個額外的狀態,它的ColorDrawable是在我的colors.xml中定義的(因爲我不能從drawable繼承,並且android的list_selector drawables在SDK中不可見,供我使用我想只是添加一個狀態,但是如何執行使用額外狀態?)

+0

好的我發現問題不在選擇器中。 我想要的是一個列表,其中包含兩種不同顏色的項目,例如gmail應用已閱讀\未讀項目。再次的問題是,一旦我設置了某個項目的背景,選擇器不再可見。任何想法如何改變項目的選擇或新聞事件的APLHA水平? – codeScriber 2011-01-19 09:07:09

回答

3

找到了答案。 我的問題不是選擇器的狀態,我希望選擇器處於所有項目的相同狀態! 問題是,如果布爾值爲true,如果適配器中的某些布爾值爲false,並且顏色爲X,但是即使顏色爲X,我仍然希望它在選定或按下後是透明的。

因此,解決辦法是下面的XML:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
      android:drawable="@android:color/transparent" /> <!-- pressed --> 
    <item android:state_selected="true" 
      android:drawable="@android:color/transparent" /> <!-- focused --> 
    <item android:drawable="@color/viewed_hotels_color" /> <!-- default --> 
</selector> 

我發現了,即使列表本身是獲取國家之一,它傳遞給它的孩子的狀態(即列表項)我認爲它沒有做。 只有android:重點不會在這裏生效,android列表項不會被聚焦,但會被選中...所以您可以在任何未按下或選擇的狀態下看到我給出我的默認顏色,否則它是透明的,並且選擇器對於所有。

在我的適配器我需要將下面的代碼(在getView()方法):

View itemView = convertedView; <- i'll spare you the layout details... 
Item item = getItem(position); 
if(item.isViewed()){ 
    itemView.setBackgroundResource(R.drawable.viewed_item_background); 
}else{ 
    itemView.setBackgroundDrawable(null); 
} 

這樣可以確保每一個項目都會得到正確的背景。當然,如果項目狀態更改爲查看,我希望它顯示我需要調用適配器上的notifyDatasetCahnged()。

0

您可以實現您的Adapter的自定義子類並覆蓋方法getView()。由於此方法被列表調用以獲得單個項目的View,您可以通過重寫getView()來定義單個列表項的外觀。因此,更改已經查看的項目的背景顏色應該不成問題。

UPDATE

其中ListView類擴展有一個稱爲setDrawSelectorOnTop()方法的AbsListView類。我認爲你可以用它來控制選擇器的行爲。

+0

我剛纔解釋了爲什麼這不起作用,當你設置背景opf你在getView()中創建的視圖時,你創建一個情況,其中該項目將不再被按下或選擇,因爲選擇器在視圖下面自動繪製並認爲視圖的背景是透明的。請在回答明顯之前閱讀。 – codeScriber 2011-01-13 14:42:12

相關問題