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

ImageView の代わりに Drawable をメソッドに渡すことで修正できると思います。次に、ローカルの ImageView 変数を作成し、setImageDrawable(Drawable drawable) メソッドを使用します。その後、ImageView を LinearLayout に追加できるはずです - prevHolder.

于 2011-05-22T16:24:16.607 に答える
1

ビューの一方または両方を再利用しています。RelativeLayout に追加する新しい ImageView をインスタンス化する必要があります。レイアウトの一部ではなくなったビューをリサイクルしたい場合は、parent.removeView(view) を呼び出して明示的に親から削除する必要があります。

于 2011-05-22T16:52:20.407 に答える