2017-02-09 2 views
0

Я пытаюсь применить условное значениеCircleImageView: присвоить условное значение атрибута XML безвыходном: civ_border_color

<?xml version="1.0" encoding="utf-8"?> 

<data> 

    <import type="android.view.View" /> 

    <variable 
     name="viewModel" 
     type="com.myproject.dialogs.MessageViewModel" /> 
</data> 

<FrameLayout 
    android:layout_width="@dimen/dialogs_messages_height_max" 
    android:layout_height="@dimen/dialogs_messages_height_max"> 

    <TextView 
     android:id="@+id/description_holder" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="@dimen/dialogs_messages_item_text_top_margin_at_max" 
     android:ellipsize="end" 
     android:gravity="center" 
     android:maxLines="1" 
     android:text="@{viewModel.userName}" 
     android:textColor="@color/dark_primary_text" 
     android:textSize="16sp" 
     tools:text="Masha Petrova Vladimirovna" /> 

    <!-- when resizing messages - names goes under photo --> 

    <de.hdodenhof.circleimageview.CircleImageView 
     android:layout_width="96dp" 
     android:id="@+id/photo" 
     android:layout_height="96dp" 
     android:layout_gravity="center" 
     android:src="@drawable/empty_circle_photo" 
     bind:civ_border_color="@{viewModel.isRead ? @color/red : @color/green}" 
     bind:civ_border_width="3dp" 
     bind:strokedAvatar="@{viewModel.avatarUrl}" 
     android:layout_marginBottom="@dimen/base_double_indent"/> 



</FrameLayout> 

компилятор выдает ошибку

Error:(40, 38) Cannot find the setter for attribute 'bind:civ_border_color' with parameter type int on de.hdodenhof.circleimageview.CircleImageView. 

, когда я назначаю

bind:civ_border_color="@color/green" 

все компилирует хорошо

Я defenitely недостающих некоторые жизненно вещь.

Вот ViewModel класс:

public class MessageViewModel extends BaseObservable { 
    public final ObservableField<String> avatarUrl = new ObservableField<>(); 
    public final ObservableField<String> userName = new ObservableField<>(); 
    public final ObservableField<String> when = new ObservableField<>(); 
    public final ObservableField<Boolean> isRead = new ObservableField<>(); 
    public void setModel(DialogsList.Dialog model) { 
     if (model != null) { 
      User user = model.getUser(); 
      if (user != null) { 
       Photo avatar = user.getAvatar(); 
       if (avatar != null) { 
        avatarUrl.set(avatar.getDefaultLink()); 
       } 
       userName.set(user.getName()); 
       when.set(TimeUtils.getRelativeDate(model.getUpdateDate() * 1000L, true)); 
       isRead.set(true); 
      } 
     } 
    } 
} 
+0

В файле attr.xml проверьте, где вы определили атрибут f или 'civ_border_color', как и другие атрибуты – arjun

+0

Это потому, что' CircleImageView.setBorderColor' не называется 'setCivBorderColor' ... blind guess: используйте' bind: border_color' вместо – Selvin

ответ

0

Вы можете использовать другую переменную с именем color хранить условное значение,

public class MessageViewModel extends BaseObservable { 
    public final ObservableField<String> avatarUrl = new ObservableField<>(); 
    public final ObservableField<String> userName = new ObservableField<>(); 
    public final ObservableField<String> when = new ObservableField<>(); 
    public final ObservableField<Boolean> isRead = new ObservableField<>(); 
    int color = Color.GREEN; 
    public void setModel(DialogsList.Dialog model) { 
     if (model != null) { 
      User user = model.getUser(); 
      if (user != null) { 
       Photo avatar = user.getAvatar(); 
       if (avatar != null) { 
        avatarUrl.set(avatar.getDefaultLink()); 
       } 
       userName.set(user.getName()); 
       when.set(TimeUtils.getRelativeDate(model.getUpdateDate() * 1000L, true)); 
       isRead.set(true); 
       setColor(isRead ? Color.RED : Color.GREEN); 
      } 
     } 
    } 

    public int getColor() { 
     return color; 
    } 

    public void setColor(int color) { 
     this.color = color; 
    } 
} 

В XML файле, используйте эту переменную для установки bind:civ_border_color

<de.hdodenhof.circleimageview.CircleImageView 
     android:layout_width="96dp" 
     android:id="@+id/photo" 
     android:layout_height="96dp" 
     android:layout_gravity="center" 
     android:src="@drawable/empty_circle_photo" 
     bind:civ_border_color="@{viewModel.color}" 
     bind:civ_border_width="3dp" 
     bind:strokedAvatar="@{viewModel.avatarUrl}" 
     android:layout_marginBottom="@dimen/base_double_indent"/> 
+0

он определен там – heximal

+0

Поделитесь своим файлом 'XML' также –

+0

обновил вопрос – heximal

Смежные вопросы