我有一段代码如下:
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);
两个孩子都有GONE的可见度,所以什么都看不到? 当我以相反的顺序设置可见性时:
l1.setVisibility(View.GONE);
l2.setVisibility(View.VISIBLE);
两个孩子再次可见! 我做错了什么?为什么setVisibility()对一个孩子有影响到另一个孩子(可能全部)?
========================= 8小时后:
好的,我找到了解决方案,但我仍然不知道原因。
解决方案是通过调用addView()而不是将根参数传递给LayoutInflater.inflate()来将视图添加到帧布局中。
在此解决方法之后,每个组件视图的可见性都会独立更改。
我不知道LayoutInflater.inflate()会发生什么。
=========================和一小时后1:
羞辱我。 LayoutInflater.inflate()返回根视图,如果它作为第二个参数提供,那么 每次我在第一个解决方案中设置根布局的可见性。 LayoutInflater一切都好!
答案 0 :(得分:0)
尝试将其全部移动到一个main.xml布局(包含main
和second
),然后使用setContentView(R.layout.main)然后findViewById()
加载它并检查设置能见度模式。