我最近一直在努力解决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!
我在这里做错了什么?
由于
答案 0 :(得分:0)
守则是正确的。属性被正确调用。问题是一些Logging点没有被称为未知原因。