删除视图的子视图然后读取它后,视图将无法正常显示
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 ();
之后会显示正确的视图。
我创建了一个包含两个视图的视图。一旦一个视图为等候室(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 ();
之后会显示正确的视图。