

例えばこういう感じのことを実現したいです。  
どうすればいいでしょうか？

[code]

    // res/layouts/main.xml
    <layout>
      <data>
        <variable
          name="editable"
          type="boolean" />
      </data>
    
      <FrameLayout>
        <include layout="@{editable ? @layout/editform : @layout/show}" /> <!-- ←コレは動きません、こういう感じのことを実現したいです -->
      </FrameLayout>
    </layout>
    
[/code]


CC BY-SA 4.0
2020-11-17T14:09:46.717
72014
2020-11-17T14:19:03.540
427
question
android
Androidのdatabindingでincludeタグのlayoutを切り替える方法


xmlに記述するのではなく、プログラムから親viewを取得し、条件分岐してinflateする。


CC BY-SA 4.0
2020-11-17T14:10:30.680
72015
2020-11-17T14:10:30.680
427
72014
answer


includeタグを適当なViewGroupでラップし、そのViewGroupのvisibilityをスイッチさせる。

[code]

    // res/layouts/main.xml
    <layout>
      <data>
        <variable
          name="editable"
          type="boolean" />
      </data>
    
      <FrameLayout android:id="@+id/rootLayout">
        <FrameLayout
          android:id="@+id/editform_layout"
          android:visibility="@{editable ? View.VISIBLE : View.GONE}"      
          tools:visibility="View.VISIBLE">
          <include layout="@layout/editform" />
        </FrameLayout>
        <FrameLayout
          android:id="@+id/show_layout"
          android:visibility="@{editable ? View.GONE : View.VISIBLE}"      
          tools:visibility="View.GONE">
          <include layout="@layout/show}" />
        </FrameLayout>
      </FrameLayout>
    </layout>
    
[/code]

* * *

私が試したところ、仮に親Layout(rootLayout)がConstraintLayoutだった場合、崩れてしまった。LinearLayoutやFrameLayoutであれば大丈夫だった。


CC BY-SA 4.0
2020-11-17T14:19:03.540
72016
2020-11-17T14:19:03.540
427
72014
answer