android api: дочернее представление по-прежнему отображается, а родительское представление установлено в INVISIBLE

У меня есть 3 фрагмента в моем приложении. Макет 3-го фрагмента имеет следующий xml:

    <TableRow
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:weightSum="1"
    android:id="@+id/settings_btns_container"
    android:visibility="invisible"
    >

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center_horizontal|bottom"
            android:layout_weight="0.5">

            <Button
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Cancel"
                android:id="@+id/cancel"/>
        </LinearLayout>

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center_horizontal|bottom"
            android:id="@+id/linearLayout"
            android:layout_weight="0.5">

            <Button
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Save"
                android:id="@+id/save"/>
        </LinearLayout>
    </LinearLayout>

</TableRow>

Строка таблицы settings_btns_container установлена ​​невидимой, поэтому она не отображается при начальной загрузке. При вызове onCreate все работает как положено. Однако, когда фрагмент выходит за пределы области действия (выбирается 1-й фрагмент), когда мы возвращаемся к 3-му фрагменту, становятся видимыми дочерние элементы этого контейнера tablerow. Я добавил следующий явный код в onCreate():

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
btn_container_ui = (TableRow) settings_view.findViewById(R.id.settings_btns_container);
/*
some other code
...
*/
btn_container_ui.setVisibility(View.INVISIBLE);

Устанавливаю ли я его в INVISIBLE или GONE, не имеет значения, дети все еще видны. Я проверил значение родительской таблицы, и оно установлено на 4, что является значением константы INVISIBLE. Установка для самих дочерних элементов значения INVISIBLE скрывает их без проблем, но я хотел скрыть родителя целиком, чтобы мне не приходилось просматривать дочерние элементы один за другим. Я что-то упустил здесь?


person raf    schedule 09.09.2014    source источник
comment
Я не думаю, что сделать родителя невидимым означает, что дети тоже станут невидимыми, я думаю, вы должны сделать каждого ребенка невидимым один за другим   -  person TomTsagk    schedule 10.09.2014
comment
зачем устанавливать для каждого дочернего представления один за другим @TomTsagk   -  person Man    schedule 27.06.2017


Ответы (1)


Я не уверен, поможет ли это, но метод isShown() класса View возвращает true, если представление и все его предки видны.

person Stephen Paul    schedule 17.04.2015