У меня есть фрагмент кода следующим образом:
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 все в порядке!