2014-09-09 9 views
0

У меня есть 3 фрагмента в моем приложении. Компоновка 3-го фрагмента имеет следующий XML:android api: дочерний вид по-прежнему отображается с родительским представлением, установленным на INVISIBLE

<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 TableRow устанавливается невидимым поэтому не отображается на начальной загрузке. Когда вызывается onCreate, все работает так, как ожидалось. Однако, когда фрагмент выходит за рамки (выбран 1-й фрагмент), когда мы возвращаемся к третьему фрагменту, дети этого контейнера 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 не имеет значения, дети до сих пор видны. Я проверил значение родительского tablerow, и он установлен в 4, что является значением константы INVISIBLE. Установка самих детей на НЕВИДИМОЕ скрывает их без проблем, но я хотел скрыть весь родитель, поэтому мне не нужно проходить через детей один за другим. Я что-то упустил?

+0

Я не думаю, что создание родительского невидимого означает, что дети тоже станут невидимыми, я думаю, что вы должны установить каждого ребенка невидимым по одному – TomTsagk

+0

, почему нужно устанавливать для каждого дочернего вида один за другим @TomTsagk – Man

ответ

0

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