2011-10-20 63 views
1

我的應用程序變得有點臃腫,我想通過將一些變量變成數組並使用一些for循環來處理我的變量來「壓縮」一些代碼。 我的第一個目標是初始化我的EditText框如何引用在main.xml中創建的EditText數組

我的原代碼(工作正常)包括:

EditText miBox1, spBox1 ; 
EditText miBox2, spBox2 ; 

...

miBox1 = (EditText)this.findViewById(R.id.miBox1); 
spBox1 = (EditText)this.findViewById(R.id.spBox1); 
miBox2 = (EditText)this.findViewById(R.id.miBox2); 
spBox2 = (EditText)this.findViewById(R.id.spBox2); 

我居然有二十英里盒和20盒SP向設置 我想創建一個數組,並通過它們循環

在我的main.xml中,我已將我的EditText框更名爲 miBox [1] spBox [1]等

我宣佈我的活動有:

EditText[] miBox = new EditText[20] ;  
EditText[] spBox = new EditText[20] ; 

並投入一個for循環

miBox[i] = (EditText)this.findViewById(R.id.miBox[i]); 
spBox[i] = (EditText)this.findViewById(R.id.spBox[i]); 

但是Eclipse無法解析R.id.miBox [i]

如何在我的xml中正確創建一個EditText數組,以便 被識別?

感謝 JD

回答

4
int resID = getResources().getIdentifier("miBox" + i, 
    "id", getPackageName()); 

:如果你希望把它放在一個數組我是你的指數

EditText editText = (EditText)findViewById(resId); 

,只要做到這一點:

miBox[i] = (EditText)findViewById(resId); 
+0

感謝您的回覆。 所以我很清楚 - 我仍然使用數組嗎? 「miBox」+ 1是指數組中的一個元素還是我沒有數組的「原始」命名技術? – jday

+0

迴應你的編輯 - '如果你想把它放在一個數組...'酷 - 我認爲這正是我需要的。當我回家時我會試一試。謝謝。 – jday

+0

裏諾 - 非常棒。將我的每個活動文件大小減少了50%以上 - 謝謝 - 很好答案JD – jday

3

這裏的問題你有錯誤地修改了幾件事情。

的代碼應該是這樣的:

EditText[] miBox = new EditText[20] ;  
EditText[] spBox = new EditText[20] ; 

,並把這個變成一個for循環

miBox[i] = (EditText)this.findViewById(R.id.miBox1); 
spBox[i] = (EditText)this.findViewById(R.id.spBox1); 

這裏,msitake使用miBox[i]因爲那不是的ID,你在你的佈局XML已經使用。

希望這有助於。

+0

感謝您的回覆 在我修訂的代碼中,我嘗試在循環中標識資源。 我不能在循環中使用(R.id.miBox1),因爲它只引用Box1。 在我的main.xml中,我將我的EditText框從miBox1等重命名爲miBox [1],miBox [2]等。 – jday

+0

嗯..我看到......在這種情況下,您可以嘗試Reno告訴您的內容或,如果你瀏覽你生成的R文件並查看「miBox」的值......如果它們是串行的,你可以使用這些值而不是'R.id.miBox [i]'.... eg miBox [i] =(EditText)this.findViewById(i); //其中i = for循環中增加的變量,初始值類似0x7f050000 – Ahsan