1

2 つの異なるレイアウトの 2 つの異なるビューに同じ ID を使用している場合、R.java のクラス「id」の ID に対して 1 つの参照しか作成されていないことがわかります。実際、ビルド時にクラス「id」に同じ名前の定数を追加しようとすると、エラーが表示されるはずだと思います.なぜエラーが表示されないのですか?.そして、単一のIDで2つの異なるビューをどのように識別しますか?

4

3 に答える 3

5

2 つの異なるグループに 2 人の異なる人物がいて、どちらも Vicky という名前である場合、名前 (=id) を呼び出すときにその人物が誰であるかは問題ではありません。最初のグループで「Vicky」と呼ぶと、そのグループの Vicky が応答します。setContentView(<layout file>)Android では、グループの場所を使用して、ビューの「グループ」をアクティビティに割り当てます<layout file>。使用できない ID (読み込まれたレイアウト ファイルにないなど) を使用して findViewWithId() によってビューを要求すると、null が返されます。

例:

layout1.xml に含まれるもの

<View id="@+id/name1"/>
<View id="@+id/name2"/>
<View id="@+id/name3"/>

layout2.xml が含まれています

<View id="@+id/name1"/>
<View id="@+id/name3"/>

1 番目と 2 番目のレイアウト ファイルを呼び出すfindViewById(R.id.name1)と、最初のビューが返されます。しかしfindViewById(R.id.name2)、2 番目のレイアウトで呼び出すと、 が返されnullます。ID は A レイアウト ファイルに存在しますが、単に「ロードされた」レイアウト ファイルには存在しません。

Id は View オブジェクトへの参照ではありません。これらは、異なるレイアウトの複数のビューで使用できる識別子です。レイアウト ファイルで識別子を検索すると、それを使用してビューへの参照を取得できます。

于 2012-12-14T06:02:49.497 に答える
1

ids同じファイルではなく、異なるxmlファイルで表示するために同じ文字列名を使用できます。そして、それがコンパイラが異なるレイアウト内の異なるビューを区別する方法です

于 2012-12-14T05:51:48.480 に答える
0

2 つの異なるビューに同じ文字列を使用している場合、ID は 1 つしか生成されず、同じになります。これは、たとえば RelativeLayouts で非常に便利な機能です。@+id を複数回使用でき、同じ ID を参照することがわかっているためです。ビュー自体には一意の ID が必要ですが、ID はレイアウトステートメント。

これは設計された方法であり、エラーではありません。

于 2012-12-14T05:17:21.497 に答える