将ImageView添加到linearlayout会引发目标异常

时间:2011-05-22 12:30:56

标签: android android-gallery

大家好

我有一组ImageViews,它是我用相机拍摄的图像。 但没有保存在SD或任何东西上。

然后我在图库中显示所有图像。

现在我正在尝试在该库中创建图像的预览。因此,在库中单击图像将切换视图并将图像添加到线性布局 像这样:

private void ShowImagePreview (ImageView p_image, View p_view)
{
    setContentView(R.layout.preview);
    LinearLayout prevHolder = (LinearLayout) findViewById(R.id.mainHolder);

    p_image.setLayoutParams( new ViewGroup.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT,                                    WindowManager.LayoutParams.MATCH_PARENT));
    p_image.setScaleType(ImageView.ScaleType.FIT_XY);


    prevHolder.addView(p_image);
}

但是在这个命令上:prevHolder.addView(p_image);我得到了一个目标例外。

我调试了,我发现p_image实际上不是null或类似的东西......

我也尝试过:

ImageView test = new ImageView(this);
    test.setImageResource(R.drawable.logo);
    test.setLayoutParams( new ViewGroup.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, 
                        WindowManager.LayoutParams.MATCH_PARENT));

    prevHolder.addView(test);

这个有用了。

可能是什么问题?..

谢谢

编辑:

这是我得到的例外: 05-22 17:58:25.835:ERROR / AndroidRuntime(11815):java.lang.IllegalStateException:指定的子节点已经有父节点。您必须首先在孩子的父母身上调用removeView()。

据我所知,这是因为图片已在图库中使用。 那我该怎么解决呢?。

谢谢

2 个答案:

答案 0 :(得分:2)

我认为您可以通过将Drawable传递给您的方法而不是ImageView来修复它,然后创建本地ImageView变量并使用setImageDrawable(Drawable drawable)方法 - 之后您应该能够将ImageView添加到LinearLayout - prevHolder。 / p>

答案 1 :(得分:1)

您正在重复使用其中一个或两个观点。您应该只是实例化一个新的ImageView以添加到RelativeLayout。如果要回收不再属于布局的视图,则必须通过调用parent.removeView(view)

将它们从父项中显式删除。