Android Studio 3.0。
这是我的自定义方法:
public static int getTileWidthDpInScreen(Context context) {
// some code here
return tileWidthDp;
}
这里是带有数据绑定代码的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="com.myproject.android.customer.util.GUIUtil" />
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageViewPhoto"
android:layout_width="@{GUIUtil.getTileWidthDpInScreen()}"
android:layout_height="@dimen/preview_image_height"
android:scaleType="centerCrop"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
</layout>
结果我得到错误:
e: java.lang.IllegalStateException: failed to analyze: android.databinding.tool.util.LoggedErrorException: Found data binding errors.
data binding error msg:cannot find method getTileWidthDpInScreen() in class com.myproject.android.customer.util.GUIUtil
此错误是因为我未在方法getTileWidthDpInScreen()
中传递上下文。
如何在xml中获取上下文并将其传递给方法:getTileWidthDpInScreen()
?
答案 0 :(得分:1)
将生成一个名为
context
的特殊变量,用于绑定 根据需要的表达式。上下文的值是Context
对象 从根视图的getContext()
方法中获取。context
变量是 被具有该名称的显式变量声明覆盖。
因此解决方案是:
android:layout_width="@{GUIUtil.getTileWidthDpInScreen(context)}
答案 1 :(得分:0)
您只需要在XML数据导入中导入<import type="android.content.Context" />
。
然后,您只需使用context
即可访问数据绑定的上下文。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.content.Context" />
<import type="com.myproject.android.customer.util.GUIUtil" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageViewPhoto"
android:layout_width="@{GUIUtil.getTileWidthDpInScreen(context)}"
android:layout_height="@dimen/preview_image_height"
android:scaleType="centerCrop"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>