Android
android開発
DataBinding

Data Bindingで論理演算子などを使う

いつもわからなくなって過去のコードを掘り出してくることになるので備忘録

  • 論理積を使う
android:visibility="@{hogeFrag!=null && hogeFrag.isGotResult ? View.GONE : View.VISIBLE}"
  • 論理和を使う
android:text="@{HogeClass.canStart() || HogeClass.isFinished() ? "push for start" : null}"
  • 3項演算子を使う
android:text="@{HogeClass.isStarted() ? "isStarted" : null}"
  • 文字列の一部を実行時に値を決める。+ 他の文字列を再利用する。

    • values/strings.xml
    <string name="pages">%1$d枚目%2$s色</string>
    <string name="red"></string>
    
    • layout/hoge_layout.xml
    <layout>
    <data>
        <variable
            name="data"
            type="com.user.hogehoge.hogeClass"/>
    </data>
    
    (中略)
    
     android:text='@{@string/pages(data.pageNo,@string/red)}'
    
    (以下略)
    

->「3枚目赤色」「5枚目赤色」のように実行時に値を変更可能したり、他の文字列を再利用したりできる。

  • 文字列の結合
     android:text='@{ @string/month + @string/day }'
  • android SDKのクラスや自作クラスをimportする(staticな値やメゾッドの使用のため)
   <data>
        <import type="android.view.View"/>

        <import type="com.user.hoge.HogeClass"/>

   </data>
  • 自作クラスのデータを宣言する
    <data>
        <variable
            name="hogeFrag"
            type="com.user.hoge.HogeFragment"
            />
    </data>
  • DataBindingとは直接関係ないが、string.xml内の文字列に「"」を含めたいとき(ハマって時間溶かしてしまったので)
    <string name="hoge">\"</string>

-> 「&quot;」だと、android studio上のpreviewだと「"」とちゃんと表示されるが、実機だと無視されて何も表示されないので注意
(参考:https://qiita.com/kazuhidet/items/7866ec0ce3e8b0fccf60)