LoginSignup
41
28

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-04-10

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

  • 論理積を使う

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>
  • int型で自作クラスを介して渡した変数をString型にする

     android:text='@{ String.valueOf(data.price) }'
  • DataBindingとは直接関係ないが、string.xml内の文字列に「"」を含めたいとき(ハマって時間溶かしてしまったので)
    <string name="hoge">\"</string>

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

41
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
28