2011-10-19 9 views
4

私は今夜のアプリケーションで作業していましたが、レイアウトが異なる2つの同様のアクティビティ(mylayout1.xmlとmylayout2.xml)があることに気付きました...しかし、それらのレイアウト内では、 ids(各レイアウトファイルの "@ + id/mybutton")。Android:同じIDを持つ要素を持つ異なるレイアウト - 動作しますが、なぜですか?

アクティビティでContentView(R.layout.mylayout1)を設定し、setOnClickListener()を実行するためにfindViewById(R.id.mybutton)を実行すると、Androidがどのボタンを実際に参照しているかを「知っている」クリックして?

すべては、適切なコールバックがトリガされているようにうまく動作しているようです(これまでのテストでは、一度に1つしか表示されませんがOTOH、Androidがそれについてスマートになっているなら、私は心配しないであろうということは、私が(私がこの無関係な作業中にこの重複に気付いたように)私に起こるだけです。そのような要素の複数のインスタンスが決して同時に画面に表示されない限り(OKボタンなど)

+1

あなたのonCreateではあなたがdiffを膨張させているからです。これらのIDはそのレイアウトでのみ検索されます – ingsaurabh

+0

これはかなり基本的な質問だったと感じています...おそらく私は正しい条件で検索しませんでした。私は迅速かつ正確な返信に感謝します! – MartyMacGyver

答えて

4

setContentViewを呼び出すと、XMLからのビュー階層が解析されて作成されます。特定のIDを持つビューを検索すると、アンドロイドはそのビュー階層を調べ、そのIDが一致するビューを検索します。したがって、これらのビュー要素はアクティビティビュー階層の一部ではないため、同じIDを持つ他の.xmlファイルで定義されているビュー要素で終わることはありません。

+0

それは私が考えたものです。ありがとう! – MartyMacGyver

1

これは、setContentView(View)メソッドがドキュメント内のアクティビティの内容を明示的なビュー、およびfinbViewById(int id)は、setContentViewで設定したビューオブジェクトを参照します。あなたが正しく設定されていないレイアウト内の要素を参照すると、アプリケーションはヌルポインタ例外でクラッシュします。

+0

私は、数分前にヌルポインターのことを気付きました...私は今接続していませんでした。ありがとう! – MartyMacGyver

+1

あなたは歓迎です – Blackbelt

関連する問題