2012-08-17 64 views
0

我有我的自定義適配器的幾行代碼:變化的文字和行的顏色上點擊

int colorPos = position % colours.length; 
vi.setBackgroundColor(colours[colorPos]); 

colours的定義,像這樣:

private int[] colours = new int[] { R.drawable.row_colour, R.drawable.row_colour2 }; 

我用這個,所以當用戶點擊我的一行中背景顏色發生了變化。我有每行交替顏色,所以這就是爲什麼有兩個R.drawable.row_colour s。初始顏色應該是灰色的,但所有的行都是黑色的。當我點擊每一行時,它會變成這種棕色。這是我的row_colour和row_colour2代碼:

row_colour

<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" android:state_pressed="false" android:color="#ABCC2A" /> 
    <item android:state_focused="true" android:state_pressed="true" android:color="#ABCC2A" /> 
    <item android:state_focused="false" android:state_pressed="true" android:color="#ABCC2A" /> 
    <item android:color="#424242" /> 
</selector> 

row_colour2

<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" android:state_pressed="false" android:color="#ABCC2A" /> 
    <item android:state_focused="true" android:state_pressed="true" android:color="#ABCC2A" /> 
    <item android:state_focused="false" android:state_pressed="true" android:color="#ABCC2A" /> 
    <item android:color="#1B1B1B" /> 
</selector> 

我需要改變背景顏色,但與此代碼它不工作。我需要這些行在#424242#1B1B1B之間切換,並在點擊它們時轉到#ABCC2A。預先感謝任何信息,您可以提供

回答

0

假設你想要的顏色只有當用戶按壓項目暫時改變,只是刪除了state_focused元素,就像這樣:

<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:color="#ABCC2A" /> 
    <item android:color="#424242" /> 
</selector> 

但是,如果您希望顏色保持更改,您需要擴展您的適配器或列表並存儲選定的項目,或者擴展每個項目的根佈局以存儲它是否被選中。然後,在您的自定義適配器中,提供視圖時,請查詢此信息並修改適合的背景顏色。總而言之,實現應該是簡單的事情是一種混亂而複雜的方式。我聽說另一種方法是在您的項目的擴展根佈局中實現Checkable接口,但個人從未取得過成功。

+0

仍然不能用於我的行背景。它仍然呈現棕色。當它被認爲是在黑色和灰色之間交替時,行的主色也是全黑的 – BigT 2012-08-17 15:34:44

+0

當你說它變成了棕色時,你的意思是按下時的變化正在工作,但它會變成一些棕色顏色而不是#ABCC2A的綠色?行背景當前是黑色的#000000,還是一些應該是的#1B1B1B? – skyrift 2012-08-17 15:51:30

+0

這些行目前是黑色的,是的,它會去一些褐色,而不是我想要的綠色。 – BigT 2012-08-20 14:27:24

0

如果您通過適配器中的方法getView以編程方式更改顏色,則必須更新適配器中的狀態......通過set方法或其他方法......然後調用一個強制ListView重繪其功能的函數狀態,並因此通過調用適配器上的getView來重建列表項。我嘗試了ListView.invalidate(),它工作,但BaseAdapter.notifyDataSetChanged()也應該工作。