由于一个重要原因,我需要在整个应用程序中仅保留 单个View实例。
在应用程序中,将有多个父视图(每个视图仅显示一次)。我需要将子视图移动到当前活动的父视图。
我尝试了以下操作:
if (view_to_move_around != null) {
ViewGroup oldParent = (ViewGroup) view_to_move_around.getParent();
if (oldParent != null) {
oldParent.removeView(view_to_move_around);
}
} else {
// Initialise the View
}
newParent.addView(view_to_move_around)
然而,这种方法似乎不起作用?完全停留在这一点上。
答案 0 :(得分:0)
我想我的问题将是“你的意思是什么不起作用?”你有例外吗?它没有正确显示?它是否没有问题执行,但没有显示?它是否显示,但它始终在初始化?
您是否在将每个父视图中的子视图传递给下一个视图之前进行操作?
几乎没有什么可以确定的:
布局参数。它们都设置正确吗?对于父母和孩子?
父视图。从我能看到的代码看起来并没有错误。父视图是否正确显示?
可见性。父母和孩子都是View.VISIBLE?
修改强>
甜。好吧,当我调试这些东西时,我首先想保持简单。我会采用子视图,将其背景颜色设置为紫色(或者与父颜色形成对比色)。然后,为简单起见,设置它的布局参数以匹配父级。假设ParentView是FrameLayout:
mChildView.setBackgroundColor(Color.CYAN);
mNewParentView.addView(mChildView,
new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT, Gravity.CENTER));
它是否填满并接管了父母?
在中间步骤中,它被移除后是否不再有父项?
Log.d("LOGTAG", mChildView.getParent().toString());
新父母是否显示已添加子女?
Log.d("LOGTAG", mNewParentView.getChildCount()): // before and after
它是否显示在父母的其他观点后面?
mParentView.bringChildToFront(mChildView);
答案 1 :(得分:0)
可能的问题是您使用getParent()来存储oldParent。比较例如:
if (view_to_move_around != null) {
ViewGroup oldParent = (ViewGroup) findViewById(R.id.old_parent);
if (view_to_move_around.getParent() == oldParent) {
oldParent.removeView(view_to_move_around);
}
} else {
// Initialise the View
}
newParent.addView(view_to_move_around)
这听起来像你想要的吗?如果有效,请告诉我。