我遇到了与以下对象绑定数据的问题。我有一个对象类调用ScanInfo看起来像这样。
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 ... \ event \ 4.171.1.0 \ res \ layout \ barcode_list_item.xml:57:31-62:AAPT:No resourc 指定的e类型(在'text'处,值为'@ {scanInfo.barcodeItem.content}')。
我想知道我在这里做错了什么。请帮我解决这个问题。
答案 0 :(得分:0)
您可以使用方法参考
android:text="@{scanInfo::getBarcodeContent}"