2016-09-07 1 views
3

사용자 정의 필드에 데이터 바인딩을 사용하고 있습니다. 이 사용자 지정 데이터 바인딩 어댑터를 설정했습니다.데이터 바인딩 오류 : 이전 값 다음에 새로운 값이 와야합니다. 매개 변수 2는 매개 변수 3과 동일한 유형이어야합니다.

내 바인딩 어댑터는 다음과 같습니다

@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); 
} 

그리고 내 레이아웃 파일에

나는이 :

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.

:

... 
<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}" /> 

을하지만 아래의 오류가 발생하고 실행하는 동안 나는 여기서 무엇이 잘못 될지 이해하지 못한다.

답변

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

당신이 Kotlin에'pubic static void'를 쓰는 데 사용되지 않기를 바랍니다 : P –