动态添加的图像视图在暂停()或旋转设备时消失

时间:2013-06-25 08:58:02

标签: android android-imageview android-orientation

我似乎想要解决可能是一个非常简单的问题。

我有一项活动,用户可以点击按钮,动态地将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 个答案:

答案 0 :(得分: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);
        }
    });

如果您的地图在轮换后为空,而您没有时间玩保存/恢复实例状态,只需将地图设为静态。

祝福。

答案 1 :(得分:0)

在方法范围内声明您的imageview变量:

ImageView iv = new ImageView(this);

添加变量后,您无法重复使用该变量。

答案 2 :(得分: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();
}

答案 3 :(得分:-1)

在清单

中为该活动添加configChanges
    <activity
    ....
    android:configChanges="orientation" 
    .... >