2013-06-28 72 views
1

我想將mvxbindable列表視圖的高亮顏色從標準橙色自定義爲動態顏色集。我認爲這很容易,但我錯了:)使用mvvmcross/mono droid自定義mvxbindablelist的選擇器顏色

我發現我應該使用StateListDrawable在適配器中設置列表項的背景可繪製。我以下面的方式做到這一點(綠色是測試,_backgroundGradient是在構造函數中創建的);

public override View GetView(int position, View convertView, ViewGroup parent) 
     { 
      var view =base.GetView(position, convertView, parent); 

      StateListDrawable sld = new StateListDrawable(); 


      sld.AddState(new int[] { Android.Resource.Attribute.StateFocused }, new ColorDrawable(Color.Green)); 

      sld.AddState(new int[] { Android.Resource.Attribute.StatePressed }, new ColorDrawable(Color.Green)); 

      sld.AddState(new int[] {}, _backgroundGradient); 

      view.Focusable = true; 

      if (view != null) 
      { 
       view.SetBackgroundDrawable(sld);  
      } 


      return view; 
     } 

但是,當列表項被點擊沒有顏色我顯示。下面是我的XML:

<listitem> 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:local="http://schemas.android.com/apk/res/dk.appsfabrikken.cmsapp" 
    android:id="@+id/tableViewItem" 
    android:layout_width="fill_parent" 
    android:layout_height="90dp" 
    android:paddingBottom="1dp" 

    local:MvxBind="{'Click':{'Path':'ShowCellDetails'}}"> 

    <CmsApp.Droid.Controls.UmbracoImageView 
    android:id="@+id/viewImagePreview" 
    android:layout_width="90dp" 
    android:layout_height="90dp" 
    android:scaleType="centerCrop" 
    android:padding="5dp" 
    local:MvxBind="{'ImageData':{'Path':'ImageIconData'},'HideImage':{'Path':'Hidden'}}" /> 

    <TextView 
    android:layout_gravity="center_vertical" 
    android:id="@+id/title" 
    android:textStyle="bold" 
    android:textColor="@color/table_text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="5dp" 
    local:MvxBind="{'Text':{'Path':'Title'}}" /> 

</LinearLayout> 

我必須失去了一些東西 - 任何幫助是高度讚賞。

回答

1

好吧我自己解決了。這可能是一個新手的錯誤,但嘿,我解決了它。我試圖向視圖添加一個點擊事件,這也沒有被觸發。所以我決定將StateListDrawable添加到listitem的linearlayout中,而不是視圖的背景。這解決了我的問題。

我增加了以下我的方法在適配器:

var ll = view.FindViewById<LinearLayout>(Resource.Id.tableViewItem); 
      if (ll != null) 
      { 
       ll.SetBackgroundDrawable(sld); 
      } 

我仍然不能完全肯定它爲什麼當我把它添加到視圖背景沒有工作。 我希望這可以節省別人的一天,因爲它毀了我的:)

+0

你知道你可以直接在XML中做到這一點嗎? – Cheesebaron

+0

是的,但顏色的定義是動態的,並從web服務中反思。 – Bjarke