0
我遇到与下列对象进行数据绑定的问题。我有一个对象类调用ScanInfo看起来像这样。Android数据绑定:错误:未指定资源类型
public class ScanInfo extends BaseObservable implements Parcelable {
private BarcodeItem barcodeItem;
private ParcelInfo parcelInfo;
private int childCount = 0;
private boolean showQuantity;
private boolean showDeviation;
private boolean hasParcel;
private boolean hasBarcode;
public ScanInfo(BarcodeItem barcodeItem) {
this.barcodeItem = barcodeItem;
}
public ScanInfo(ParcelInfo parcelInfo) {
this.parcelInfo = parcelInfo;
}
public ScanInfo(BarcodeItem barcodeItem, ParcelInfo parcelInfo) {
this.barcodeItem = barcodeItem;
this.parcelInfo = parcelInfo;
}
@Bindable
public BarcodeItem getBarcodeItem() {
return barcodeItem;
}
public void setBarcodeItem(BarcodeItem barcodeItem) {
this.barcodeItem = barcodeItem;
notifyPropertyChanged(BR.hasBarcode);
}
@Bindable
public ParcelInfo getParcelInfo() {
return parcelInfo;
}
public void setParcelInfo(ParcelInfo parcelInfo) {
this.parcelInfo = parcelInfo;
notifyPropertyChanged(BR.hasParcel);
}
@Bindable
public boolean isHasParcel() {
return hasParcel;
}
@Bindable
public boolean isHasBarcode() {
return hasBarcode;
}
public void setChildCount(int childCount) {
this.childCount = childCount;
}
public void setShowQuantity(boolean showQuantity) {
this.showQuantity = showQuantity;
}
public void setShowDeviation(boolean showDeviation) {
this.showDeviation = showDeviation;
}
@Bindable
public String getBarcodeContent() {
return barcodeItem.getContent();
}
}
我将它绑定到来自适配器和适配器的列表项getView方法我已经这样做了。
convertView = _inflater.inflate(R.layout.barcode_list_item, parent, false);
BarcodeListItemBinding binding = BarcodeListItemBinding.bind(convertView);
ScanInfo scanInfo = getItem(position);
BarcodeItem barcodeItem = scanInfo.getBarcodeItem();
if (barcodeItem != null) {
scanInfo.setChildCount(getChildCount(barcodeItem));
scanInfo.setShowQuantity(barcodeItem.getQuantity() > 1 || (barcodeItem.getQuantity() == 1 && _showParcelQuantityOne));
scanInfo.setShowDeviation(_deviations != null && _deviations.size() > 0 && hasDeviation(barcodeItem));
}
binding.setScanInfo(scanInfo);
binding.executePendingBindings();
和列表项的资源文件看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<import type="xx.xxx.xxx.BarcodeItem" />
<import type="xx.xxx.xxx.ParcelInfo" />
<variable
name="scanInfo"
type="xx.xxx.xxx.ScanInfo" />
</data>
...
<TextView
android:id="@+id/textBarcode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:gravity="top"
android:singleLine="true"
android:textAppearance="?android:textAppearanceMedium"
android:visibility="visible"
android:text="@{scanInfo.barcodeItem.content}"
tools:text="123123123123ABABABABABABABA" />
...
</layout>
但是,当我编译它总是给出了以下错误
F:\ ExProjects ... \事件\ 4.171.1.0 \ res \ layout \ barcode_list_item.xml:57:31-62:AAPT:无资源 指定的e类型(在'text'中,值为'@ {scanInfo.barcodeItem.content}')。
我想知道我在这里做错了什么。请帮我解决这个问题。
你使用:'dataBinding.enabled = TRUE;在你的build.gradle文件? –
[Gradle:没有指定资源类型('text',值为'@ {user.name}')的可能重复。数据绑定不工作](http://stackoverflow.com/questions/37723767/gradle-no-resource-type-specified-at-text-with-value-user-name-databi) – tynn
@GeorgeMount是的,我已经用它在我正在处理的模块在将其添加到所有其他模块后,它可以工作。 – Sanath