删除视图的子项然后阅读后,该视图将无法正确显示

时间:2019-04-01 16:33:35

标签: java android android-view

我创建了一个包含两个视图的视图。一旦将其显示为等候室(A),然后将其显示为第二视图(B),则可以接听电话。

调用到达视图A后,将调用第二个视图(B)。有用。如果用户完成了交互,则应返回视图(A)。不幸的是,这行不通。

这是调用视图B的代码。这很好。

// Add view to content
OVSLobbyActivity.this.rootWaitingRoom.view.setVisibility(View.GONE);
OVSLobbyActivity.this.root.removeChild(OVSLobbyActivity.this.rootWaitingRoom);
OVSLobbyActivity.this.root.appendChild(OVSLobbyActivity.this.rootCallRoom);
OVSLobbyActivity.this.rootCallRoom.view.setVisibility(View.VISIBLE);

// Set fullscreen
OVSLobbyActivity.this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
OVSLobbyActivity.this.onWindowFocusChanged(true);

// force to change the layout
root.view.invalidate();
root.view.requestLayout();

这里是隐藏视图B并再次显示视图A的代码。这不能很好地工作。这是仅显示白页的问题。活动中的要素丢失了。

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
this.onWindowFocusChanged(false);


this.rootCallRoom.view.setVisibility(View.GONE);
this.root.removeChild(OVSLobbyActivity.this.rootCallRoom);
this.root.appendChild(OVSLobbyActivity.this.rootWaitingRoom);
this.rootWaitingRoom.view.setVisibility(View.VISIBLE);

// force to change the layout
root.view.invalidate();
root.view.forceLayout();
root.view.requestLayout();

有什么想法吗? 谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

解决方案是必须重新计算视图的大小。重新计算度量后,您必须执行以下行:

  

this.view.requestLayout();

之后,将显示正确的视图。