почему дети FrameLayout все видимы или все невидимы? - PullRequest
4 голосов
/ 25 декабря 2011

У меня есть фрагмент кода следующим образом:

    super.onCreate(savedInstanceState);
    android.view.LayoutInflater inflater = (android.view.LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
    android.widget.FrameLayout fl=(android.widget.FrameLayout)inflater.inflate(R.layout.empty_layout, null);
    android.view.View l1=inflater.inflate(R.layout.main,fl);
    android.view.View l2=inflater.inflate(R.layout.second,fl);
    l2.setVisibility(View.VISIBLE);
    l1.setVisibility(View.VISIBLE);
    setContentView(fl);       

    Log.i("     ","l1 visibility: " + String.valueOf(l1.getVisibility()));
    Log.i("     ","l2 visibility: " + String.valueOf(l2.getVisibility()));

Обе дочерние схемы ВИДИМЫ, и это нормально. Но когда я пытаюсь установить видимость следующим образом:

    l2.setVisibility(View.VISIBLE);
    l1.setVisibility(View.GONE);

У обоих детей пропала видимость, так что ничего не видно? Когда я устанавливаю видимость в обратном порядке:

    l1.setVisibility(View.GONE);
    l2.setVisibility(View.VISIBLE);

Оба ребенка снова видны! Что я делаю не так? Почему setVisibility () для одного дочернего элемента влияет на другого (вероятно, все)?

========================= и через 8 часов:

Хорошо, я нашел решение, но до сих пор не знаю причину.

Решение - добавить представления в макет фрейма, вызвав addView () вместо передачи корневого параметра в LayoutInflater.inflate ().

После этого обходного пути видимость каждого компонента изменяется независимо.

Понятия не имею, что происходит с LayoutInflater.inflate ().

========================= и через час 1:

Позор мне. LayoutInflater.inflate () возвращает корневое представление, если оно предоставляется в качестве второго параметра, поэтому каждый раз я устанавливаю видимость корневого макета в первом решении. С LayoutInflater все в порядке!

1 Ответ

0 голосов
/ 25 декабря 2011

Попробуйте переместить все это в один макет main.xml (с main и second), а затем загрузите его с помощью setContentView (R.layout.main), затем findViewById() и проверьте настройку режима видимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...