2014-09-03 50 views
1

我想知道如果有人可以向我解釋爲什麼,當膨脹佈局時,如果ViewGroup被指定,以後removeView()什麼也不做。那就是:佈局Inflater,ViewGroup和removeView()

在的onCreate:

currentView = this.findViewById(android.R.id.content).getRootView(); 
    vg = (ViewGroup) currentView; 

在後面的方法:

  getHelp.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        LayoutInflater inflater = GraphicsActivity.this.getLayoutInflater(); 
        final View faqView = inflater.inflate(R.layout.graphfaq, vg); 


        final View faqClose = findViewById(R.id.graph_faq_close); 
        faqClose.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v2) { 
          if (MainActivity.debug) Log.i(TAG,"inside faqClose listener"); 
          vg.removeView(faqView); 
         } 
        }); 
       } 
      }); 

此膨脹並正確顯示faqVIew但第二clickListener被觸發時,該視圖不會被刪除。

但是,做這種方式不會刪除當點擊關閉視圖:

    final View faqView = inflater.inflate(R.layout.graphfaq, null); 
        vg.addView((faqView)); 

只是想獲得更好的理解這一切是如何工作的。

TIA

回答

2

從文檔:

公衆查看充氣(INT資源,根的ViewGroup)

返回膨脹層次的根查看。如果root提供, 這是根View;否則它是充氣XML文件的根源。

含義:

vg.removeView(faqView); 

被解釋爲:

vg.removeView(vg); 

不存在在那裏,因此它不能被刪除。

編輯:

讓我把我的話是不同的:vg不能從vg刪除,因爲一個觀點本身並不存在。

評論:如果你不傳遞根目錄,你的視圖將不會附加到任何東西,但它會被誇大。

代碼有時更好的解釋它:

// This returns vg // Basically faqView == vg 
View faqView = inflater.inflate(R.layout.graphfaq, vg); 

// This find the layout you attached 
View yourView = faqView.findViewById(R.id.graphfaq_layout); 

// This removes the layout 
faqView.removeView(yourView); 

由於它已經說過很多次了Android的文件是隱藏的。你需要閱讀幾遍才能知道發生了什麼。

+0

我有點看到你在說什麼,但不是真的。那麼你什麼時候將實際的視圖組傳遞給inflater?那又有什麼意義呢? – TrustNoOne 2014-09-03 17:27:09

+0

@TrustNoOne這一點很明顯。要獲得視圖,請將視角添加到ViewGroup中。如果您沒有傳遞根視圖,那麼您的視圖將沒有任何附加內容。 – Simas 2014-09-03 17:33:56

+0

對不起,你猜我剛剛密集。你在一個地方說傳遞vg不會添加視圖,然後在評論中你說的是。 – TrustNoOne 2014-09-05 17:44:13

相關問題