Android数据绑定:错误:未指定资源类型

时间:2017-02-24 05:35:24

标签: android-databinding

我遇到了与以下对象绑定数据的问题。我有一个对象类调用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}')。

我想知道我在这里做错了什么。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

您可以使用方法参考

android:text="@{scanInfo::getBarcodeContent}"