Android - 数据绑定 - 带表达式的字符串属性

时间:2017-12-14 11:07:31

标签: android

我最近一直在努力解决Android几乎无法解决的问题。 我正在尝试构建一个自定义控件,该控件将从函数中动态获取其中一个值。 但无济于事。 这是attrs.xml条目:

<declare-styleable name="BinaryOptionButtonAttrs">
<attr name="binaryText" format="string"/>
<attr name="binaryValue" format="string"/>
<attr name="binaryDirection" format="enum">
    <enum name="up" value="0x00"/>
    <enum name="down" value="0x01"/>
</attr></declare-styleable>

以下是自定义控件视图代码:

public class BinaryOptionButton extends LinearLayout {
private Context mContext;
private String mText;
private String mValue;
private BINARY_OPTION mDirection;

public BinaryOptionButton(Context context) {
    super(context);
}

public BinaryOptionButton(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;
    initAttrArray(attrs);
    initBinaryOptionButton();
}

public String getBinaryText() {
    return mText;
}

public void setBinaryText(String mText) {
    this.mText = mText;    }

public String getBinaryValue() {
    return mValue;
}

public void setBinaryValue(String mValue) {
    this.mValue = mValue;        Log.d(this.getClass().getPackage().getName(),
            "BinaryOptionButton.mValue=" + mValue);
}

public BINARY_OPTION getBinaryDirection() {
    return mDirection;
}

public void setBinaryDirection(BINARY_OPTION mDirection) {
    this.mDirection = mDirection;
}

private void initBinaryOptionButton() {

}

private void initAttrArray(AttributeSet attrs) {
    TypedArray attrsArray   = mContext.obtainStyledAttributes(attrs,
            R.styleable.BinaryOptionButtonAttrs, 0, 0);

    mText = attrsArray.getString(
            R.styleable.BinaryOptionButtonAttrs_binaryText
    );

    mValue = attrsArray.getString(
            R.styleable.BinaryOptionButtonAttrs_binaryValue
    );

    mDirection = BINARY_OPTION.parseInt(attrsArray.getInt(
            R.styleable.BinaryOptionButtonAttrs_binaryDirection,
            BINARY_OPTION.UP.value()
    ));
    Log.d(this.getClass().getPackage().getName(),
            "mText=" + mText);

    Log.d(this.getClass().getPackage().getName(),
            "mValue=" + mValue);

    Log.d(this.getClass().getPackage().getName(),
            "mDirection=" + mDirection);

    attrsArray.recycle();
} }

以下是自定义视图的示例用法:

<layout  xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:bind="http://schemas.android.com/apk/res-auto">
<data>
    <import type="Utils"/>
    <variable
        name="HANDLER"
        type="ViewListener"/>
    <variable name="dataCount" type="int"/>
    <variable name="dataVector" type="java.util.List"/>
</data><RelativeLayout
android:layout_width="match_parent" android:layout_height="match_parent">
<com.package.BinaryOptionButton
android:id="@+id/btn"
android:layout_width="150dp"
android:layout_height="100dp"
bind:binaryText='@{"BUY"}'
bind:binaryValue="@{Integer.toString(dataCount)}"
bind:binaryDirection="@{Utils.binary(dataVector)}"    
android:onClick='@{() -> HANDLER.onAction("data")}'/></RelativeLayout</layout>

属性binaryText显示&#34; BUY&#34;。但是,甚至不会调用属性binaryValue和binaryDirection!

我在这里做错了什么?

由于

1 个答案:

答案 0 :(得分:0)

守则是正确的。属性被正确调用。问题是一些Logging点没有被称为未知原因。