1

大家好

我有一组 ImageView,它们是我用相机拍摄的图像。但没有保存在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()。

我知道这是因为该图像已在图库中使用。那么我该如何解决呢?

谢谢你

4

2 回答 2

2

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

于 2011-05-22T16:24:16.607 回答
1

您正在重用您的一个或两个视图。您应该只实例化一个新的 ImageView 以添加到 RelativeLayout。如果要回收不再属于布局的视图,则必须通过调用 parent.removeView(view) 将它们从其父级显式删除

于 2011-05-22T16:52:20.407 回答