2017-08-24 80 views
-2

我添加視圖到rootview以這種方式無法從根視圖中刪除視圖

private RelativeLayout addThisView; 
private View rootView; 

LayoutInflater inflater = LayoutInflater.from(mContext); 
addThisView = (RelativeLayout) inflater.inflate(R.layout.loading_temp_cover, null, false); 
if(rootView instanceof FrameLayout){ 
    ((FrameLayout)rootView).addView(addThisView); 
} 

試圖從根視圖中刪除視圖

/* remove view from the root view start */ 

rootView = ((Activity) mContext).getWindow().getDecorView().findViewById(android.R.id.content); 
RelativeLayout loadingTempCoverRelative =(RelativeLayout) rootView.findViewById(R.id.loadingTempCoverRelative); 

if(loadingTempCoverRelative!=null){ 
    if(rootView instanceof FrameLayout){ 
     ((FrameLayout)rootView).removeView(loadingTempCoverRelative); 
    } 
} 

/* remove view from the root view end */ 

,然後當我檢查loadingTempCover是存在(下面的代碼)。它仍然存在.. 我調試看看;當到達並完成removeView()函數時,它不會產生任何效果。我仍然可以在rootview中看到loadingTempCover佈局。我不明白我在哪裏做錯了..

rootView = ((Activity)mContext).getWindow().getDecorView().findViewById(android.R.id.content); 
RelativeLayout loadingTempCoverRelative =(RelativeLayout) rootView.findViewById(R.id.loadingTempCoverRelative); 

if(loadingTempCoverRelative!=null){ 
    loadingTempCoverRelative.setVisibility(loadingTempCoverRelative.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE); 
    return; 
} 
+0

我理解的問題。怎麼可能android studio導致這個問題。有趣的..我重建項目和removeView函數正在工作。順便說一句,我不明白你爲什麼把我的問題標記爲沒用?這太有趣了.. – fthopkins

回答

0

嘗試直接通過視圖獲取父:

rootView = ((Activity) mContext).getWindow().getDecorView().findViewById(android.R.id.content); 
RelativeLayout loadingTempCoverRelative =(RelativeLayout) rootView.findViewById(R.id.loadingTempCoverRelative); 

ViewGroup parent = loadingTempCoverRelative.getParent(); 

if(loadingTempCoverRelative!=null){ 
    if(rootView instanceof FrameLayout && parent != null){ 
     parent.removeView(loadingTempCoverRelative); 
    } 
} 

應測試條件if(rootView instanceof FrameLayout)爲好,這個問題也許是這裏。

希望它有幫助。

+0

感謝您的回覆。它與條件或getParent無關。 Android工作室導致此問題。我重建了這個項目,現在問題沒有了。 – fthopkins

0

使用以下代碼

((ViewGroup) rootView.getParent()).removeView(namebar);