在Android中重新显示视图无法正常工作

时间:2014-02-03 14:41:57

标签: android

所以我有这样的代码:

((LinearLayout) view.getParent()).removeView(view);
container.addView(view);

现在,如果我错了,请更正我,但该代码应该从当前ViewGroup中删除该视图,然后将其添加到新的ViewGroup

但是,引发了以下exception

E/AndroidRuntime(31220): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

有关为何会发生这种情况的任何想法吗?

编辑:这只发生在父:XML标签中将android:animateLayoutChanges设置为true时

3 个答案:

答案 0 :(得分:4)

它不起作用可能是因为View有mParent字段,它没有通过调用它的父节点上的removeView()来重置。

相反,它可能更好地给新视图充气。

编辑现在你已经说过layoutTransition了,你可以尝试从ViewParent中移除layoutTransition,同时删除它。从来没有尝试过。

final ViewGroup parent = (ViewGroup) view.getParent();
final LayoutTransition transition = parent.getLayoutTransition();
parent.setLayoutTransition(null);
parent.removeView(view);
parent.setLayoutTransition(transition);
newParent.addView(view);

答案 1 :(得分:0)

您应该尝试将其投射到ViewGroup:

((ViewGroup) childView.getParent()).removeView(childView);

答案 2 :(得分:0)

解决:

由于动画,在动画完成之前,视图实际上并未移除,大约需要300毫秒

所以这样的事情应该可以正常工作(350毫秒计时器只是为了确保动画完成):

((ViewGroup) view.getParent()).removeView(view);
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
    public void run() {
        container.addView(view);
    }
}, 350);