setVisibility(View.GONE)后视图不再出现

时间:2017-10-30 22:59:56

标签: android android-viewpager android-linearlayout

我有一个LinearLayout,我试图使其可见,然后GONE,然后再次可见。然而,在使它GONE之后,它再也不会变得可见。作为一个注释,如果我将其设为不可见,它可以正常工作:它会出现并消失,没有任何问题。

这些是我的文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:id="@+id/noconnectionll"
        android:visibility="gone"
        android:padding="@dimen/node_default_spacing"
        android:background="@color/category_no_internet"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:text="@string/no_internet_short"
            android:textColor="#fff"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/no_connection_retry"
            android:text="@string/try_again"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>
    <ListView
        android:dividerHeight="0dp"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
    <LinearLayout
        android:id="@+id/spinner_wrapper"
        tools:visibility="visible"
        android:visibility="invisible"
        android:background="#a0ffffff"
        android:gravity="center_horizontal|center_vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/spinner"
            android:src="@drawable/ic_spinner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/category_loading"
            android:text="@string/loading"
            android:textColor="#000"
            android:padding="@dimen/activity_padding"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</LinearLayout>

这是我用来显示/隐藏的方法:

private void hideOrShowLoading(final boolean show) {

    final ViewGroup spinnerWrapper = (ViewGroup)ll.findViewById(R.id.spinner_wrapper);
    final View spinner = ll.findViewById(R.id.spinner);

    if (show) {
        spinnerWrapper.setVisibility(View.VISIBLE); // Not working after being set to GONE previously
        final Animation rotation = AnimationUtils.loadAnimation(getContext(), R.anim.rotate);
        rotation.setFillAfter(true);
        spinner.startAnimation(rotation);
    } else {
        spinnerWrapper.setVisibility(View.GONE);
        spinner.clearAnimation();
    }
}

任何提示?它是否与高于0且权重为1的ListView有关?

由于

更新

我在if (show)阻止后尝试了以下操作,没有运气:

    listview.invalidate();
    spinnerWrapper.invalidate();
    ll.invalidate();
    ll.requestLayout();

ll是包含两者的LinearLayout。

1 个答案:

答案 0 :(得分:0)

虽然我认为这是由layout_weight=1属性引起的,但我无法正确解决此问题。

以下黑客确实有效。基本上,我在另一个线性布局中围绕spinnerWrapper,它总是可见的。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:id="@+id/noconnectionll"
        tools:visibility="visible"
        android:visibility="gone"
        android:padding="@dimen/node_default_spacing"
        android:background="@color/category_no_internet"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:text="@string/no_internet_short"
            android:textColor="#fff"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/no_connection_retry"
            android:text="@string/try_again"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>
    <ListView
        tools:background="#d496d4"
        android:dividerHeight="0dp"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
    <!-- Weird bug with layout_weight=1 on the listview above means we need this linearlayout -->
    <LinearLayout
        android:background="#0ca917"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:id="@+id/spinner_wrapper"
            android:background="#a0ffffff"
            android:gravity="center_horizontal|center_vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <ImageView
                android:id="@+id/spinner"
                android:src="@drawable/ic_spinner"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
            <TextView
                android:id="@+id/category_loading"
                android:text="@string/loading"
                android:textColor="#000"
                android:padding="@dimen/activity_padding"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>