0
最近、Androidでほとんど解決できない問題に苦労しています。 私は、その値を関数から動的に取るカスタムコントロールを構築しようとしています。 しかし、役に立たない。ここ はattrs.xmlエントリです:ここでAndroid - データバインディング - 文字列属性と式
<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は "BUY"を示します。しかし、属性binaryValueとbinaryDirectionは決して呼び出されません!
私はここで間違っていますか?
ありがとうございました
バインディングで生成されたソースを確認しようとしましたか? – pskink
...どこを探しますか?ディレクトリ名?ファイル名? –
これはdataBindingディレクトリ内の唯一のファイルです:DataBindingInfo.java [code]パッケージandroid.databinding.layouts; import android.databinding.BindingBuildInfo; @BindingBuildInfo(buildId = "7e917fdd-a282-4afe-bf93-be5785860cd8") パブリッククラスDataBindingInfo {} [/ code] –