Big_Chair
Big_Chair

Reputation: 3239

ViewBinding - How to switch/choose layout dynamically (<include>)?

I was planning on having two layout versions for the profile fragment, one for new user and one for logged in user.

How would I dynamically switch/choose the necessary layout in the Fragment's onCreateView() method?

The most straight-forward idea that comes to mind is to use two <include> layouts and hiding one of them in onCreateView() depending on variables. But I was wondering if there is a smarter approach.


Current layout xml:
The main content is inside the second FrameLayout and I'd like to have two versions to choose from.

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.MainActivity">

    <ImageView
        android:id="@+id/profile_monk_head_imageview"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:contentDescription="@string/profile_monk_image_content_desc"
        android:src="@drawable/monk_head" />

    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <!-- This is what I want to switch out -->
        <FrameLayout ... >

    </androidx.core.widget.NestedScrollView>

</FrameLayout>

Upvotes: 2

Views: 1875

Answers (1)

Anoop M Maddasseri
Anoop M Maddasseri

Reputation: 10549

Use DataBindingUtil version inflate if layoutId is unknown in advance ( a.k.a dynamic binding). Otherwise, use the generated Binding's inflate method to ensure type-safe inflation.

enter image description here

Crosslink reference

Upvotes: 1

Related Questions