我似乎想要解决可能是一个非常简单的问题。
我有一项活动,用户可以点击按钮,动态地将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);
}
答案 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"
.... >