无法从根视图中删除视图

时间:2017-08-24 11:28:19

标签: android android-view rootview

我以这种方式将视图添加到if (x < elements.length) x=x+1 else x=0; x = x < elements.length ? x+1 : 0; x = (x + 1) % elements.length;

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()中看到loadingTempCover布局。我无法理解我在哪里做错了..

rootview

3 个答案:

答案 0 :(得分: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),问题可能在这里。

希望它有所帮助。

答案 1 :(得分:0)

使用以下代码

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

答案 2 :(得分:0)

实际上是这里的队长。我在使用animateLayoutChanges选项时遇到了同样的问题,需要说的是,有可能出现这个问题。此外, Android 10 Q 毫无问题。

但是对于所有其他情况,都无法使用animateLayoutChanges移除父视图。这很有意义,因为父级需要此视图才能完成动画。但是任何延迟都无济于事,View也会在延迟后与父母同住。