2012-01-17 13 views
0

私の頭の中の要約は何かのようなものですグローバル変数が必要ですか、R.string.xは問題ありませんか?

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

私はR.string.stringnameも

を変更しますので、私は、同じプロジェクト内のどこ

をR.string.stringnameを使用することができますが、明らかにそれは誤りであるxを変更するたびになるよう

編集: 私はformActivity

に、別のdifferentActivityでのEditTextフィールド上の入力に自分の名前(R.string.nameまたはグローバル)と年齢(R.string.ageまたはグローバル)を考えたいと思います持っているように彼:

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

私はあなたが求めているものはかなりよく分かりません。明確にしていただけますか?また、あなたの質問を適切に書式設定し、正しい文法/大文字を使用すると、人々はより多くの回答に傾く可能性があります。 –

+0

私はあなたが少し前に尋ねた別の質問に[この回答](http://stackoverflow.com/a/8888672/983430)を読むべきだと思います。あなたは 'R.string.x'値の目的を誤解しているようです。 –

答えて

1

これは本当に貧弱なデザインのようです。何をあなたはxの型を知らないことをやって、それはあなたがあなたのアプリケーション間で保持する必要が何かしていますか? findViewById()によって返される

すべてが表示オブジェクトまたはそのサブクラスの1つです。だから、あなたはあなたがビューオブジェクトを持って知っているバットの右。もう一つはfindViewByIdが、それだけでR.id.myVarが実際に膨張した階層での表示に対応する整数であるように、int型の値を受け入れるパラメータとして文字列を受け付けないということです。

あなたが絶対にそういったことをしなければならないのであれば、なぜ同じidを探して、それをinstanceofを使って比較できる汎用のViewオブジェクトに割り当てるのでしょうか?後で?このように:その場合は

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 :( –

+0

それはあなたが扱っている正確なサブクラスを決定することができますfindViewByIdは常にViewベースクラスから継承するものを返しますが、instanceofはあなたが扱っているサブクラスを正確に決定する方法を提供します(ImageView、TextView 、LinearLayoutなど)、findViewByIdから返されたオブジェクトを、それらのViewタイプのそれぞれのクラスシグネチャと比較することによって行います。 –

0

R.string.<anything>があなたのstring.xmlをファイルに定義された文字列のIDで、周りに浮いグローバル変数を持つよりもより保守設計のように感じています。 findViewByIdへのパラメータは、あなたがR.id.<anthing>で見つけることができるID、であるため、ライン

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

は失敗します。

string.xmlファイルで名前と年齢を定義したい場合は、コード内のActivityまたはViewからアクセスできます。私は実際にあなたを疑って欲しい

は設定可能と複数のビューからアクセス可能である名前と年齢の変数を持つことです。別Activityに1 Activityからのデータを渡すには、Intentにエキストラにそれらを置くことができます。 Activity2で、その後

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

:たとえば

は、あなたがActivity2.javaを開始Activity1.javaに、あなたのような何かを行うことができます。Javaは、あなたがテントに入れエキストラを得ることができ、何かのように:

Bundle extras = getIntent().getExtras(); 
name = extras.getString("Name"); 
age = extras.getInt("Age"); 
関連する問題