2016-09-07 2 views
3

Я использую привязку данных для своих настраиваемых полей. Я установил для этого специальный адаптер привязки данных.Ошибка привязки данных: старым значениям должны следовать новые значения. Параметр 2 должен быть того же типа, что и параметр 3

My Binding Adapter выглядит следующим образом:

@BindingAdapter({"created_by,created_at"}) 
public static void setDetailCreated(TextView textView, String createdBy, long createdAt) { 
    Calendar cal = Calendar.getInstance(); 
    cal.setTimeInMillis(createdAt); 

    SimpleDateFormat dateFormat = new SimpleDateFormat("h:mm a, dd MMM yyyy"); 

    String format = textView.getContext().getString(R.string.details_created, createdBy, 
      dateFormat.format(cal.getTime())); 

    textView.setText(format); 
} 

И в моем файле макета у меня есть:

... 
<data> 

    <import type="java.util.Map" /> 

    <import type="com.example.beans.Friend" /> 

    <variable 
     name="user" 
     type="com.example.beans.User" /> 

    <variable 
     name="friends" 
     type="Map&lt;String, Friend&gt;" /> 

</data> 

.... 
.... 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:created_by="@{friends[user.createdBy].name}" 
     app:created_at="@{user.createdAt}" /> 

Но во время работы я получаю ошибку ниже:

Error:Execution failed for task ':app:compileDebugJavaWithJavac'. java.lang.RuntimeException: failure, see logs for details. BindingAdapter setDetailCreated(android.widget.TextView,java.lang.String,long): old values should be followed by new values. Parameter 2 must be the same type as parameter 3.

Я не понимаю, что здесь происходит не так?

ответ

10

Ошибка находится в вашем BindingAdapter, он должен быть

@BindingAdapter({"created_by","created_at"}) 
public static void setDetailCreated(TextView textView, String createdBy, long createdAt){ 

} 

все значения должны быть разделены запятой и в двойных кавычках.

+1

Ой ... Ты спас меня! Глупая ошибка! Хороший улов ! – kirtan403

0

В Котлин это выглядит для меня:

@BindingAdapter(*arrayOf("created_by, created_at")) 
public static void setDetailCreated(textView: TextView, createdBy: String, createdAt: Long){ 

} 
+0

надеюсь, что вы не используете для написания «лобковой статической пустоты» в Котлине: P –

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