1

おそらく非常に単純な問題を修正しようとして、私は頭がおかしくなっているようです。

ユーザーがボタンをクリックできるアクティビティがあり、ImageView動的に画面に追加されます。これImageViewも に格納されますArrayList。ユーザーがアクティビティを一時停止するか、デバイスを回転させると、レイアウトに追加されたすべての画像が消えます。ただし、それらはまだに格納されていArrayListます。をループしてArrayList再度レイアウトに画像を追加しようとしましたが、エラーがスローされました - 指定された子には既に親があります。

以下は、レイアウトとArrayListに画像を追加するための私のコードです

public void AddImage() {

    RelativeLayout rl = (RelativeLayout) findViewById(R.id.top);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT,
            RelativeLayout.LayoutParams.WRAP_CONTENT);

    iv = new ImageView(this);
    id++;
    iv.setId(id);
    params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);

    iv.setImageResource(R.drawable.foo);

    iv.setLayoutParams(params);
    rl.addView(iv);
    arrayList.add(iv);
}
4

4 に答える 4

1

List の代わりに Map を作成してから、次のようにする必要があります。

map.put(imageViewId,R.drawable.imageViewResource);

次に、一時停止した後、次のようにします。

RelativeLayout rl = (RelativeLayout) findViewById(R.id.top);
ImageView imageView = (ImageView)rl.findViewById(imageViewId);

Integer imageViewResource = map.get(imageViewId);
imageView.setImageResource(imageViewResource);

これで画像が更新されない場合は、次のことを試してください。

        imageView.post(new Runnable() {
        @Override
        public void run()
        {
             imageView.setImageResource(imageViewResource);
        }
    });

回転後にマップが空で、インスタンスの状態を保存/復元する時間がない場合は、マップを静的にします。

幸運をお祈りしています。

于 2013-06-25T09:20:49.740 に答える
0

メソッドのスコープ内で imageview 変数を宣言します。

ImageView iv = new ImageView(this);

追加した変数を再利用することはできません。

于 2013-06-25T09:01:57.500 に答える
0

そのアクティビティの configChanges をマニフェストに追加します

    <activity name="Your ClassName with Package" android:configChanges="orientation"/>

以下のようにメソッドAddImage()を呼び出します。OnCongigurationChanged

 @Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    int ot = getResources().getConfiguration().orientation;
    switch (ot) {
    case Configuration.ORIENTATION_LANDSCAPE:
        AddImage();
        break;
    case Configuration.ORIENTATION_PORTRAIT:
        AddImage();
        break;
    }
}

@SuppressWarnings("deprecation")
@Override
public Object onRetainNonConfigurationInstance() {
    return super.onRetainNonConfigurationInstance();
}
于 2013-06-25T09:12:31.187 に答える
-1

そのアクティビティの configChanges をマニフェストに追加します

    <activity
    ....
    android:configChanges="orientation" 
    .... >
于 2013-06-25T09:01:39.813 に答える