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

您需要创建 Map 而不是 List ,然后执行以下操作:

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 回答