2011-12-25 101 views
3

我有一段代碼如下:爲什麼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!

+0

謝謝。你在這裏拯救了生命。 – 2017-08-10 03:14:01

回答

0

嘗試將其全部移至一個main.xml佈局(使用mainsecond),然後使用setContentView(R.layout.main)然後加載findViewById()並檢查設置可見性模式。

+0

但我絕對希望他們分開設計。我想知道它爲什麼以這樣一種奇怪的方式工作。 – ardabro 2011-12-25 20:13:56

+0

好吧,當我嘗試對位於我的主佈局上的兩個按鈕進行VISIBLE/GONE測試,並且主佈局是位於empty_layout(FramaLayout)上的唯一佈局時,它似乎正常工作。我不知道該怎麼想。 Android庫中的錯誤? – ardabro 2011-12-25 23:32:10