listview自定义适配器上的SetBackgroundResource获取错误

时间:2018-05-17 18:28:48

标签: java android xamarin

我正在尝试在我的适配器

中创建自定义列表视图行颜色

这是我的xml

artists_list_backgroundcolor

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
 <item 
 android:state_selected="false"
    android:state_pressed="false" 
    android:color="#6495ED" />
<item android:state_pressed="true" 
   android:color="#ffffff" />
<item android:state_selected="true"
 android:state_pressed="false" 
     android:color="#E5F5FA" />
</selector> 

这是我在适配器中的代码

public override View GetView(int position, View convertView, ViewGroup parent)
    {
        View row = convertView;
        if (row == null)
        {
            row = LayoutInflater.From(mContext).Inflate(Resource.Layout.CategoryPreview, null, false);

        }

        TextView txtCategoryName = row.FindViewById<TextView>(Resource.Id.txtCategoryName);
        txtCategoryName.Text = mitems[position].CategoryName;
        TextView txtCategoryID = row.FindViewById<TextView>(Resource.Id.txtCategoryID);
        txtCategoryID.Text = mitems[position].CategoryID;

        row.SetBackgroundResource(Resource.Drawable.artists_list_backgroundcolor);

        return row;
    }

当活动开始时我会收到错误

Android.Content.Res.Resources + NotFoundException:Drawable WiOrderAndroid.WiOrderAndroid:drawable / artists_list_backgroundcolor,资源ID#0x7f020053

只有当我以这种方式设置我的xml时才能工作。

    <?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_pressed="true" >
    <shape>
      <solid
          android:color="#ef4444" />

    </shape>
  </item>

</selector>

但这是正确的方法吗?

2 个答案:

答案 0 :(得分:0)

尝试使用R.drawable.artists_list_backgroundcolor代替

答案 1 :(得分:0)

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
  <item 
 android:state_selected="false"
    android:state_pressed="false" 
    android:color="#6495ED" />
<item android:state_pressed="true" 
   android:color="#ffffff" />
<item android:state_selected="true"
 android:state_pressed="false" 
     android:color="#E5F5FA" />
</selector> 

根据以上代码,您定义的内容为ColorStateList,它应位于res/color/artists_list_backgroundcolor.xml路径中,而不是res/drawable/,并且应由@color/artists_list_backgroundcolor引用或Resource.Color.artists_list_backgroundcolor

您需要的是drawable selector。请参阅this

更新

SetBackgroundResource方法:

  

将背景设置为给定资源。资源应引用Drawable对象或0以删除背景。

资源应位于drawable文件夹中,但您的artists_list_backgroundcolor文件属于ColorStateList,它应位于/res/color/文件夹中,而不是drawable文件夹中

如果您要使用artists_list_backgroundcolor文件,则需要将其放在/res/color/文件夹中。但是您无法在row.SetBackgroundResource(Resource.Drawable.artists_list_backgroundcolor);之前使用它,请参阅this以使用ColorStateList