Android - 在父视图之间移动视图的单个实例

时间:2014-08-01 15:30:06

标签: android singleton

由于一个重要原因,我需要在整个应用程序中仅保留 单个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)

然而,这种方法似乎不起作用?完全停留在这一点上。

2 个答案:

答案 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)

这听起来像你想要的吗?如果有效,请告诉我。