删除视图的子视图然后读取它后,视图将无法正常显示

After removing a child of a view and then readding it, the view will not display properly

我创建了一个包含两个视图的视图。一旦一个视图为等候室(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 的代码。这不能很好地工作。这是只显示白页的问题。 activity 中的元素丢失。

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();

知道哪里出了问题吗? 感谢您的帮助。

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

this.view.requestLayout ();

之后会显示正确的视图。