Androidの異なるレイアウトで同じIDを使用できますか?


90

私はAndroid開発に不慣れです。画像とTextViews異なるLayoutXMLファイルに同じIDを使用しても問題ありませんか?

eclipseがそれらを自動リストすると、プロジェクトのすべてのレイアウト変数がリストされるので、衝突しますか?今まで、同じIDを異なるレイアウトで使用しても問題は発生していませんが、長期的には懸念しています。



@Pavelは、制約を調整するためにIDが必要です。
SaddaHussain19年

回答:


96

レイアウトごとに異なるIDを使用することをお勧めします。長期的には、レイアウトが多く、そのためIDが多い場合、それらを区別するのは非常に複雑になります。

私は通常、IDに次のような名前を付けますlayoutName_elementId

特にオートコンプリートを使用している場合は、探しているIDを簡単に見つけることができます(作業しているレイアウトはわかっていますが、IDはわかりません。この場合、名前付け戦略では、レイアウト名を入力するだけで、そのレイアウトのすべてのIDが表示されます)。

レイアウトとIDの詳細については、こちらをご覧ください

ハッピーコーディング、


2
あなたのok_buttonすべての活動で言うことを探すことの問題は何ですか?探しているチャットがわかっている場合は、オートコンプリートがさらに明確になります。
Dan Chaltiel 2015年

132

簡単な答え:はい、できます。

長い答え:これを行うことができるのは、findViewById()を使用してレイアウトの一部への参照を取得するときは常に、メソッドは現在拡張されているレイアウトでそのビューのみを検索するためです。そのため、同じIDを持つ別のビューが別のレイアウトにある場合でも、Androidはそこでそれを検索しません。


15
もっと長い答えをいただけますか?R.id.layout_idは静的整数であり、コンパイル時に事前に決定されているため、findViewById()は現在拡張されているレイアウトを認識しません。
クロエ

22
この質問に出くわす他の誰かのために、私はクロエの要求に答えたかった。IDは各ビューで同じですが、同じアクティビティで2回表示されることはありません。比喩として、私があなたにたくさんの数字が書かれた紙の束を与えたらどうなるか考えてみてください。これらの紙のいくつかには、4番が書かれています。あなたはシートの1つを見ているので、4を丸で囲んでください。これは簡単です。次に、4が付いた別のシートを確認します。あなたもそれを見つけて丸で囲むことができます。番号が事前に定義されていてもかまいません。
テッドカンネロンゴ2014

6
Tedのコメントに同意しません。同じアクティビティで、同じIDを持つ2つのコンポーネントを同時に実行できます。アプリで問題が発生しました。メインアクティビティで2つの異なるViewPagerを同時に使用していました。現在IDで表示されているViewPagerを取得しようとすると、実際にはバックグラウンドで実行されているもう1つのViewPagerが取得されました。2つのIDを一意にするだけで問題を修正しました。
Yoann Hercouet

8
@YoannHercouetこれは、両方が同じシート上にあったためだと思います(アクティビティ)
Naheel

22

開発者APIガイドによると:

IDはツリー全体で一意である必要はありませんが、検索するツリーの一部内で一意である必要があります(多くの場合、ツリー全体である可能性があるため、可能な場合は完全に一意であることが最善です)。

つまり、簡単に言うと、これは必須ではありませんが、競合の可能性を回避することをお勧めします。


1
私はかつて同じIDを誤って作成しました。すべてのインスタンスが再設定されたため、後で名前の変更を解除するのは大変な作業でした。これは、IDの競合が発生すると、失敗することを意味します。すべてを再び分離することは非常に困難です。
t3chb0t

@ t3chb0t本当です!「ローカルのみ」にチェックを入れても、AndroidStudioはすべてのインスタンスの名前を変更します。それは絶対にばかげています。
ジョングレン

15

将来的にリファクタリングが必要になったview id場合、Android StudioはすべてのXMLファイルとクラスでリファクタリングし、問題が発生するため、お勧めしません。

ただしid、抽象化があり、複数のレイアウトを再利用する場合など、同じものを使用する必要がある場合もあります。

プロジェクトにviews同じものが複数id'sあり、リファクタリングが必要な場合は、手動で行い、ビルドインIDE関数を使用せず、レイアウトid内のターゲットビューを変更してから、XMLレイアウト内の赤いエラーを修正します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.