调用emoveAllViews();仍会导致IlLegalStateException:您必须首先对子对象的父级调用emoveView()

我不确定为什么会发生这种情况,但我收到错误消息:调用layout.removeAllViews();仍然会导致IllegalStateException: The specified child already has a parent.您必须首先在子级的父级上调用emoveView()。

奇怪的是,我在添加新的之前调用了:emoveAllViews():

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.download);

...

    ImageView imageViewz = (ImageView) findViewById(R.id.imageView6); 
            Picasso.with(context).load(background).into(imageViewz);

LinearLayout layout = new LinearLayout(Download.this);
                layout.setId(R.id.download);
                LayoutParams layoutParams 
                 = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
                layout.setLayoutParams(layoutParams);
                layout.setOrientation(LinearLayout.VERTICAL);
                LayoutParams imageViewLayoutParams 
                 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                imageViewz.setLayoutParams(imageViewLayoutParams);
                layout.removeAllViews();
                layout.addView(imageViewz);
                setContentView(layout);
但我仍然收到致命错误...所以我不确定发生这种情况的确切原因。

如有任何建议,我们不胜感激。


解决方案

您的问题与layout无关。您的问题是imageViewz。它已经有了父级,这就是触发您的异常的原因。在将layout添加到layout之前,您需要从其当前父级中删除imageViewz

相关文章