2013-03-14 94 views
0

iv此時至少有一天在這個問題上掙扎,在互聯網上搜索,但沒有解決方案爲我工作,我一直試圖理解它爲什麼會發生,以及如何解決它正確的方法。CheckableLinearLayout背景確實會隨着背景選擇器而改變

問題: 我無法改變行背景色/繪製時,它被「選中」,我知道什麼時候被選中,因爲我的根元素實現經過接口。

我不知道設置屬性機器人之間的差別:與的Android listSelector ListView控件的:背景我行根元素(CheckableLinearLayout)的財產。

Android會使用選擇器並應用我的背景屬性?因爲他們都沒有工作到現在,它總是透明的。

在某些情況下,當我點擊列表中的項目,該項目去紅色,然後回到透明,也是方法onCreateDrawableState永遠不會真的叫,我想可能是相關的。

我的場景:

API 10(2.3.3)使用延伸ArrayAdapter定製適配器一個ListView

一種活性。 我的ListView行資源的根元素:

<com.company.views.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="5dp" 
    android:orientation="horizontal"> 
... 

CheckableLinearLayout

public class CheckableLinearLayout extends LinearLayout implements Checkable { 
private static final int[] STATE_CHECKED = {android.R.attr.state_checked}; 

     @Override 
     protected int[] onCreateDrawableState(int extraSpace) 
     { 
... 
      int[] drawableState = super.onCreateDrawableState(extraSpace + 1); 

      if (isChecked()) 
       mergeDrawableStates(drawableState, STATE_CHECKED); 

      return drawableState; 
     } 
... 
    } 

我的選擇:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true"> 
    <shape> 
     <solid android:color="@color/solid_blue" /> 
    </shape> 
</item> 
    <item> 
     <shape> 
      <solid android:color="@color/solid_red" /> 
     </shape> 
    </item> 
</selector> 

我甚至試圖用一個空選擇在那裏設置背景紅色,但仍然,我排隊紅色。

任何幫助非常感謝!

謝謝!

回答

0

沒關係,上面的代碼是正確的,我發現在我的代碼的另一個地方的以前的嘗試中,我將我的列表項背景設置爲透明。

刪除該代碼後,我將我的listview listSelector設置爲一個透明選擇器(以刪除橙色選擇背景)。

然後將CheckableLinearLayout背景設置爲上面的我的選擇器。

之後,我的onCreateDrawableState得到正常調用,並且背景更改如選擇器中指定。

就是這樣!