2013-06-25 38 views
0

我似乎要去禿頭試圖解決可能是一個非常簡單的問題。動態添加圖像查看消失onPause()或當旋轉設備

我有一個活動,用戶可以點擊一個按鈕,並且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

使用saveInstaceState保存您的arrayList參考http://stackoverflow.com/a/15362869/1935890 –

+0

我認爲應用程序生命週期是一個很好的起點。如果我沒有記錯,但前一段時間。旋轉觸發它。 –

+0

@DixitPatel ArrayList存儲在saveInstanceState中。該列表本身保存並加載得很好。這只是實際的圖像,不再出現 – Linn

回答

-1

爲活動添加configChanges清單中

<activity 
    .... 
    android:configChanges="orientation" 
    .... > 
+0

嘗試過,但不幸的是它不起作用 – Linn

0

方法的範圍內聲明的ImageView的變量代碼:

ImageView iv = new ImageView(this); 

一旦添加了變量,就不能再使用該變量。

0

清單中

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

爲活動添加configChanges並調用你的方法OnCongigurationChanged如下AddImage()

@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(); 
} 
1

您需要創建地圖,而不是列表,然後像做:

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); 
     } 
    }); 

如果您的地圖是旋轉後空的,你有沒有時間,保存/恢復實例的狀態,只是讓靜態的地圖打。

祝福。