2012-01-17 69 views
0

在我腦海中的一個摘要就像我需要全局變量還是R.string.x可以嗎?

idontknow x =(idontknow)findViewById(R.string.stringname);

這樣,每當我改變X的R.string.stringname也會改變

,因此我可以在同一個項目

在任何地方使用的R.string.stringname但顯然這是一個錯誤

編輯: 我想輸入我的名字(R.string.name或全球)和年齡(R.string.age或全球)上一個EditText字段上formActivity

而在另一個differentActivity我會喜歡有t他:

TextView x = (TextView) findViewById(<some id>); 
x.setText("Hello "+ getString(R.string.nfoname)+ "you are"+getString(R.string.nfoname)+"years old"); 
+0

我不太清楚你在問什麼。你能澄清一下嗎?另外,正確地格式化問題並使用正確的語法/大寫可能會使人們更傾向於回答。 – 2012-01-17 02:24:46

+0

我想你應該閱讀[這個答案](http://stackoverflow.com/a/8888672/983430)到另一個問題,你問了很久以前。您似乎誤解了「R.string.x」值的用途。 – 2012-01-17 03:05:37

回答

1

這真的看起來很糟糕的設計。你在做什麼,你不知道x的類型,這是你需要堅持你的應用程序?

findViewById()返回的所有內容都是View對象或其某個子類。所以,馬上你知道你有一個視圖對象。另一件事是,findViewById不接受一個字符串作爲參數,它只接受一個int值,這樣R.id.myVar實際上是一個對應於充氣層次結構中的View的整數。

如果你絕對必須這樣做,爲什麼不只是使用一個公共的id值,以便你總是搜索相同的id並將其分配給一個通用的View對象,可以使用instanceof進行比較後來?就像這樣:

View view = findViewById(R.id.generic_id); 
if(view instanceof TextView) {TextView actualView=(TextView)findViewById(R.id.generic_id);} 
else {ImageView actualView = (ImageView)findViewById(R.id.generic_id);} 
return actualView; 

在這種情況下,你的ID可能是不能改變一個常數,而你總是可以找出你處理什麼子視圖。這感覺像一個更易於維護的設計,而不是讓全局變量浮動,在我看來,

+0

uhm,「if(view instanceof TextView)」是什麼意思?謝謝-beginner :( – 2012-01-17 02:39:29

+0

它可以讓你確定你正在處理的確切的子類。findViewById將總是返回從View基類繼承的東西,但instanceof給你一種方法來確定你正在處理的子類(ImageView,TextView ,LinearLayout等),將您從findViewById獲得的對象與每個視圖類型的類簽名進行比較。 – 2012-01-17 02:53:14

0

R.string.<anything>是在您的string.xml文件中定義的字符串的ID。該生產線

idontknow x = (idontknow) findViewById(R.string.stringname); 

將失敗,因爲參數findViewById是一個id,你可以在R.id.<anthing>找到。

如果您想要在string.xml文件中定義名稱和年齡,那麼您可以在代碼中使用任何ActivityView

我懷疑你實際上想要的是有一個名稱和年齡變量,可以設置和從多個視圖訪問。要將數據從一個Activity傳遞到另一個Activity,可以將它們放入Intent的附加組件中。

例如,在Activity1.java你開始Activity2.java,你可以這樣做:

Intent i = new Intent(this, Activity2.class); 
i.putExtra("Name", name); // name is a variable with the name value you want to send 
i.putExtra("Age", age); // age is a variable with the age value you want to send 
startActivity(i); 

然後,在活性2。java,你可以得到你加入Intent的額外資源,例如:

Bundle extras = getIntent().getExtras(); 
name = extras.getString("Name"); 
age = extras.getInt("Age"); 
相關問題