32

R.id.id_nameXMLを膨らませた後、アンドロイドはどのようにビューを見つけるのに使用しますか?

1.それぞれ同じ ID を持つ 1 つのボタンを持つ 2 つの XML があるとします。

2.それらを膨らませてビューに変換しました

3.R.id クラスでintは、両方のボタンに対して 1 つだけが作成されます。

android は、同じリソース名 (R.id.id_name) を使用して同じ ID を持つこれらのボタンをどのように区別しますか。

4

3 に答える 3

41

ID は一意の参照ではありません。

ただし、実際には、親ビューを使用して区別します。

「これ」がアクティビティであると見なした場合、ボタンを含むレイアウトで設定すると、次のようになります。

Button button = (Button) this.findViewById( R.id.id_name );

レイアウトで最初に見つかったものを返します(実際の動作が定義されているかどうかはわかりません)。

findViewByIdただし、その ID を持つそのようなインスタンスを 1 つだけ含む親ビューを呼び出すこともできます。

LinearLayout okParent = (LinearLayout) this.findViewById( R.id.okLayout );
LinearLayout cancelParent = (LinearLayout) this.findViewById( R.id.cancelLayout );

Button okButton = (Button) okParent.findViewById( R.id.id_name );
Button cancelButton = (Button) cancelParent.findViewById( R.id.id_name );

概念的には、これは一種のパス ベースのルックアップです。これが可能になるように、レイアウトを慎重に設計する必要があります。

于 2013-02-07T19:21:16.270 に答える
21

Android は簡単な道をたどります。ID はアプリケーション全体で一意ではなく、レイアウト全体で一意です。

の値は、 idR.id.fooを持つコントロールを保持する 2 つの異なるレイアウトで同じです。foo一意性を競うわけではないので、問題ありません。

于 2013-02-07T19:23:38.437 に答える
7

これは、現在コンテンツ ビューとして設定されている (またはインフレートされている) XML ファイルでこの固有Viewのものを検索するため、どちらを使用する必要があるかを認識しています。Viewid

于 2013-02-07T19:19:53.260 に答える