2017-12-14 18 views
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は決して呼び出されません!

私はここで間違っていますか?

ありがとうございました

+0

バインディングで生成されたソースを確認しようとしましたか? – pskink

+0

...どこを探しますか?ディレクトリ名?ファイル名? –

+0

これはdataBindingディレクトリ内の唯一のファイルです:DataBindingInfo.java [code]パッケージandroid.databinding.layouts; import android.databinding.BindingBuildInfo; @BindingBuildInfo(buildId = "7e917fdd-a282-4afe-bf93-be5785860cd8") パブリッククラスDataBindingInfo {} [/ code] –

答えて

0

コードは正しいです。属性が正しく呼び出されました。問題は、いくつかのロギングポイントが不明な理由で呼び出されなかったことです。

関連する問題