Wednesday, 25 September 2019

Fragment views are blank or collapsed first time it opens

I'm dealing with a weird issue and I'm kind of lost about which direction to take:

I have a fragment which is opened from several places in the app(it shows an user profile). Most of the places it's ok but in one in particular it has a strange behavior, the first time it's open, most views are blank, but some like the profile picture and the toolbar title are ok, if I go back and enter it again then all the views are visible as expected.

I have tried several approached to solve this, one in particular is to call activity.recreate() in the fragment onCreateView() which makes the views visible but has some side effects that I want to avoid and also is just a patch and not dealing directly with the problem.

Now, the most strange part to me is that if I open the screen in the layout inspector I see this:

enter image description here

As you can see the textviews and other elements are set, but just not visible.

One experiment I tried was giving a textview a fixed width and in that case it is visible, could this be some problem with the constraintLayout?

Any other ideas?

Thanks in advance!

EDIT:

One other thing, could the viewstubs have anything to do here?

This is the layout:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="false">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true">

        <com.google.android.material.appbar.CollapsingToolbarLayout
            android:id="@+id/collapsingToolBar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:elevation="0dp"
            android:fitsSystemWindows="true"
            app:expandedTitleGravity="top"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:titleEnabled="false">

            <androidx.constraintlayout.widget.ConstraintLayout
                style="@style/ProfileContainer"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="?attr/actionBarSize"
                android:elevation="0dp"
                android:paddingBottom="@dimen/padding_margin_large_20">

                <include
                        layout="@layout/common_profile_picture"
                        style="@style/ProfileImage"
                        android:id="@+id/userPicture"
                        android:layout_width="@dimen/round_avatar_size"
                        android:layout_height="@dimen/round_avatar_size"
                        app:layout_constraintTop_toTopOf="parent"
                        app:layout_constraintStart_toStartOf="parent"/>

                <androidx.constraintlayout.widget.Group
                    android:id="@+id/follow_group"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:visibility="invisible"
                    app:constraint_referenced_ids="user_followers_label_textview,user_followers_number_textview,follow_divider,user_following_label_textview,user_following_number_textview,sectionFollowers,sectionFollowing" />

                <TextView
                        style="@style/ProfileFollowerTextLabel"
                        android:id="@+id/user_followers_label_textview"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        app:layout_constraintTop_toTopOf="parent"
                        app:layout_constraintEnd_toStartOf="@+id/user_following_label_textview"/>
                <TextView
                        style="@style/ProfileFollowerText"
                        android:id="@+id/user_followers_number_textview"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        app:layout_constraintTop_toBottomOf="@+id/user_followers_label_textview"
                        app:layout_constraintStart_toStartOf="@+id/user_followers_label_textview"
                        app:layout_constraintEnd_toEndOf="@+id/user_followers_label_textview"/>

                <View
                        android:id="@+id/sectionFollowers"
                        android:layout_width="0dp"
                        android:layout_height="@dimen/profile_vertical_divider_height"
                        android:layout_marginTop="@dimen/padding_margin_large_28"
                        android:background="?selectableItemBackground"
                        android:visibility="gone"
                        app:layout_constraintTop_toTopOf="@+id/user_followers_label_textview"
                        app:layout_constraintStart_toStartOf="@+id/user_followers_label_textview"
                        app:layout_constraintEnd_toStartOf="@id/user_following_label_textview"
                        app:layout_constraintBottom_toBottomOf="@+id/user_followers_number_textview"/>

                <include layout="@layout/common_divider"
                         android:id="@+id/follow_divider"
                         android:layout_width="1dp"
                         android:layout_height="@dimen/profile_vertical_divider_height"
                         android:layout_marginTop="@dimen/padding_margin_large_28"
                         app:layout_constraintTop_toTopOf="@+id/user_followers_label_textview"
                         app:layout_constraintBottom_toBottomOf="@+id/user_followers_number_textview"
                         app:layout_constraintStart_toEndOf="@+id/user_followers_label_textview"
                         app:layout_constraintEnd_toStartOf="@+id/user_following_label_textview"
                         app:layout_constraintHorizontal_bias="1.0"/>

                <TextView
                        style="@style/ProfileFollowingTextLabel"
                        android:id="@+id/user_following_label_textview"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        app:layout_constraintTop_toTopOf="@+id/user_followers_label_textview"
                        app:layout_constraintBottom_toBottomOf="@+id/user_followers_label_textview"
                        app:layout_constraintEnd_toEndOf="parent"/>

                <TextView
                        style="@style/ProfileFollowingText"
                        android:id="@+id/user_following_number_textview"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        app:layout_constraintTop_toBottomOf="@+id/user_following_label_textview"
                        app:layout_constraintStart_toStartOf="@+id/user_following_label_textview"
                        app:layout_constraintEnd_toEndOf="@+id/user_following_label_textview"/>

                <View
                        android:id="@+id/sectionFollowing"
                        android:layout_width="0dp"
                        android:layout_height="@dimen/profile_vertical_divider_height"
                        android:layout_marginTop="@dimen/padding_margin_large_28"
                        android:background="?selectableItemBackground"
                        android:visibility="gone"
                        app:layout_constraintTop_toTopOf="@+id/user_followers_label_textview"
                        app:layout_constraintStart_toStartOf="@+id/user_following_label_textview"
                        app:layout_constraintEnd_toEndOf="@id/user_following_label_textview"
                        app:layout_constraintBottom_toBottomOf="@+id/user_following_number_textview"/>

                <ViewStub
                        style="@style/ProfileAction"
                        android:id="@+id/profileaction_viewstub"
                        android:inflatedId="@+id/profileaction_viewstub"
                        android:layout_width="@dimen/profile_action_width"
                        android:layout_height="wrap_content"
                        app:layout_constraintTop_toBottomOf="@+id/user_following_number_textview"
                        app:layout_constraintStart_toStartOf="@+id/user_followers_label_textview"/>

                <TextView
                        style="@style/ProfileName"
                        android:id="@+id/user_fullname_textview"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        tools:text="@string/placeholder"
                        android:drawablePadding="@dimen/padding_margin_small_4"
                        app:layout_constraintTop_toBottomOf="@+id/userPicture"
                        app:layout_constraintBottom_toTopOf="@+id/donation_list_label_textview"
                        app:layout_constraintVertical_bias="0.0"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintHorizontal_bias="0.0"/>

                <TextView
                        android:id="@+id/userTitleTextView"
                        style="@style/ProfileTitle"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:visibility="gone"
                        app:layout_constraintStart_toStartOf="@+id/user_fullname_textview"
                        app:layout_constraintTop_toBottomOf="@+id/user_fullname_textview" />

                <androidx.emoji.widget.EmojiAppCompatTextView
                        style="@style/ProfileDesc"
                        android:id="@+id/user_description_textview"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        tools:text="@string/placeholderLong"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintTop_toBottomOf="@+id/userTitleTextView"/>

                <TextView
                        android:id="@+id/userWebSiteTextView"
                        style="@style/ProfileWebSite"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:autoLink="web"
                        android:visibility="invisible"
                        app:layout_constraintStart_toStartOf="@+id/user_fullname_textview"
                        app:layout_constraintTop_toBottomOf="@+id/user_description_textview" />


                <androidx.constraintlayout.widget.Group
                        android:id="@+id/donating_group"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:visibility="gone"
                        app:constraint_referenced_ids="donation_list_label_textview,donating_arrow_imageview,donationList,donationDivider" />

                <include
                        android:id="@+id/donationDivider"
                        layout="@layout/common_divider"
                        android:layout_width="match_parent"
                        android:layout_height="1dp"
                        android:layout_marginStart="@dimen/padding_margin_medium_16"
                        android:layout_marginTop="@dimen/padding_margin_medium_16"
                        android:layout_marginEnd="@dimen/padding_margin_medium_16"
                        android:layout_marginBottom="@dimen/padding_margin_medium_16"
                        app:layout_constraintBottom_toTopOf="@+id/donation_list_label_textview"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toBottomOf="@+id/userWebSiteTextView" />

                <TextView
                    android:id="@+id/donation_list_label_textview"
                    style="@style/ProfileDonatingLabel"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/profile_donating"
                    app:layout_constraintStart_toStartOf="@+id/user_fullname_textview"
                    app:layout_constraintTop_toBottomOf="@+id/donationDivider" />

                <ImageView
                    android:id="@+id/donating_arrow_imageview"
                    android:layout_width="@dimen/profile_arrow_size"
                    android:layout_height="@dimen/profile_arrow_size"
                    app:srcCompat="@drawable/ic_chevron_accent_right"
                    android:tint="?iconColorSelected"
                    app:layout_constraintBottom_toBottomOf="@+id/donation_list_label_textview"
                    app:layout_constraintStart_toEndOf="@+id/donation_list_label_textview"
                    app:layout_constraintTop_toTopOf="@+id/donation_list_label_textview"
                    app:layout_constraintVertical_bias="0.75" />

                <TextView
                    android:id="@+id/donationList"
                    style="@style/TextValue"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="start"
                    android:paddingTop="@dimen/padding_margin_small_4"
                    android:paddingBottom="@dimen/padding_margin_large_30"
                    app:layout_constraintStart_toStartOf="@+id/user_fullname_textview"
                    app:layout_constraintTop_toBottomOf="@+id/donation_list_label_textview" />

            </androidx.constraintlayout.widget.ConstraintLayout>

            <include layout="@layout/common_divider"
                     android:id="@+id/postsDivider"
                     android:layout_width="match_parent"
                     android:layout_height="2dp"
                     android:layout_gravity="bottom"
                     app:layout_scrollFlags="scroll|exitUntilCollapsed"
                     android:layout_marginStart="@dimen/padding_margin_medium_16"
                     android:layout_marginEnd="@dimen/padding_margin_medium_16"
                     android:layout_marginBottom="@dimen/padding_margin_medium_18"/>

                <include layout="@layout/common_toolbar_back"
                        android:id="@+id/profileToolbar"/>

        </com.google.android.material.appbar.CollapsingToolbarLayout>
    </com.google.android.material.appbar.AppBarLayout>

    <FrameLayout
        android:id="@+id/tabContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <TextView
        android:id="@+id/private_profile_textview"
        style="@style/TextValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|bottom"
        android:layout_marginBottom="@dimen/profile_private_label_bottom_margin"
        android:text="@string/profile_private"
        android:visibility="gone" />

    <androidx.core.widget.ContentLoadingProgressBar
        android:id="@+id/postsLoadingProgressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:theme="?android:attr/progressBarStyleLarge"
        android:visibility="gone" />

    <include layout="@layout/loader"
             android:id="@+id/profileLoader"
             android:visibility="gone"
             android:layout_width="match_parent"
             android:layout_height="match_parent"/>

</androidx.coordinatorlayout.widget.CoordinatorLayout>


from Fragment views are blank or collapsed first time it opens

No comments:

Post a Comment