我有一段代碼如下:爲什麼FrameLayout的孩子都可見或全部看不見?
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小時後1:
可恥的是我。 LayoutInflater.inflate()返回根視圖(如果它作爲第二個參數提供),所以每次我在第一個解決方案中設置根佈局的可見性時都會返回 。 一切都可以與LayoutInflater!
謝謝。你在這裏拯救了生命。 – 2017-08-10 03:14:01