2012-01-07 33 views
0

我的問題是這樣的。 我的XML佈局中有許多ImageView對象。我希望能夠將圖像置於他們身上,取決於某些「如果」和「其他人」(可以這麼說)。所以我想我會把所有這些對象分配到一個數組中。但該應用程序不會啓動。下面是我做它:設置一個ImageView數組(Android)

private void setImageView(){ 
    images = new ImageView[imagesNR]; 
    images[0] = (ImageView) findViewById(R.id.imageView1); 
    images[1] = (ImageView) findViewById(R.id.imageView2); 
    images[2] = (ImageView) findViewById(R.id.ImageView01); 
    images[3] = (ImageView) findViewById(R.id.ImageView02); 
    images[4] = (ImageView) findViewById(R.id.ImageView03); 
    images[5] = (ImageView) findViewById(R.id.ImageView04); 
    images[6] = (ImageView) findViewById(R.id.ImageView05); 
    images[7] = (ImageView) findViewById(R.id.ImageView06); 
    images[8] = (ImageView) findViewById(R.id.ImageView07); 
    images[9] = (ImageView) findViewById(R.id.ImageView08); 
    images[10] = (ImageView) findViewById(R.id.ImageView09); 
    images[11] = (ImageView) findViewById(R.id.ImageView10); 
} 

我知道這是它不是preatiest方式,但因爲我是全新的,這就是我想出了。 我很害怕我不能告訴你太多的錯誤。該應用程序正在被迫關閉,就是這樣。

是否有其他方法可以讓我有ImageView的數組並相應地處理它們?... 我要把對象轉換成的RelativeLayout,並設置好把所有這些ImageViews等,等

編輯:

private ImageView images[]; 

這就是我聲明的數組。

+0

將您的堆棧跟蹤粘貼關閉。 – Joru 2012-01-07 14:03:37

回答

0

您的imageView定義如下(檢查括號)。這是我的一個應用程序的一個定義,並且可以確定地工作。

ImageView mCnName[]= new ImageView[NUMBER_OF_IMAGE]; 

的方式基本上是沒有錯的,但如果所有的ImageView應該有類似或相同屬性的話,我會用一點點心虛的做法。讓您在默認情況下所有圖像視圖都具有藍色背景。像你一樣,你不得不在你的layout.xml文件中給每一個屬性,否則你將不得不運行一個循環,以便以編程方式更改每個ImageView的bg顏色。

在幾乎所有我的應用程序中,我喜歡這種方法。 在你的xml文件中定義具有全部屬性的ImageView。

  1. 定義layoutinflater和使用mLayOutInflater=this.getLayoutInflater();
  2. mCnName[i]=mLayOutInflater.inflate(R.layout.yourImageView, null);
  3. parentLayout.addView(mCnName[i],null); 喜歡這個更容易設計和後來改變佈局添加膨脹的看法。

但正如我所說,使用我的方法並非絕對必要。你可以工作。

+0

將不得不嘗試你的方式。我想我需要一段時間才能得到它... – 2012-01-07 17:08:33

+0

OMG,我很笨...我沒有設置變量imagesNR ...它是未定義的。剛剛必須設置imagesNR = 12,一切都很好..... OMG – 2012-01-07 17:12:38

1

我知道你說一切都很好,但只是一個建議。如果你現在花時間去熟悉這個模型,這會對你有很大的幫助。您應該知道多個圖像瀏覽比複合圖像更昂貴。如果你想要顯示一系列圖像,我建議你使用一個專爲此而設計的實現;想起畫廊,GridView或ListView。

+0

我不是說,「我的」方式是最好的,我會明確地看着「你的」方式。我現在就離開這裏,因爲它有效,而且我現在沒有時間。這個計劃是在我完成了「跛腳」版本之後,會嘗試改進它....讓它更多......「動態」和「專業」可以這麼說。不過謝謝你的提示。 – 2012-01-07 19:35:45

0

1.

for (int i = 0; i < container.getChildCount(); i++) { 
     images[i] = (ImageView) container.getChildAt(i); 
    } 

2。

for (int i = 0; i < 10; i++) { 
     int id = getResources().getIdentifier("R.id.imageView" + i, "id", null); 
     images[i] = (ImageView) getActivity().findViewById(id); 
} 

第二個是因爲每getIdentifier的文檔相當昂貴:

注:使用此功能被勸阻。通過標識符而不是按名稱檢索資源要高效得多。