SetBackgroundResource при получении пользователем нестандартного адаптера списка - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь создать собственный цвет строки списка в моем адаптере

Вот мой 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 / artistic_list_backgroundcolor с идентификатором ресурса # 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 голосов
/ 18 мая 2018
<?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.Пожалуйста, обратитесь к это

Обновление:

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.

0 голосов
/ 17 мая 2018

вместо этого попробуйте использовать R.drawable.artists_list_backgroundcolor

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...