4

アンドロイド 2.3.3。

Android での ID の命名について質問があります。

Activity1 に 2 つのボタン (保存とキャンセル) があるとします。それら (ID) に btnSave と btnCancel という名前を付けます。これで、Activity2 ができました。ここには、保存ボタンとキャンセル ボタンもあります。どちらも同じ機能を果たします。ID を btnSave および btnCancel として指定するとどうなりますか。

コンパイル中に問題が発生しますか? 私が押すと、R.id。ctrl+space の場合、2 つの btnSave と btnCancel から選択できますか?

そして最も重要なことは、なぜ別の名前を付けなければならないのでしょうか?

4

4 に答える 4

6

コードを簡単に書く方法だけが問題なら、

次のようなことを試すことができます(アクティビティまたはレイアウトxmlファイルのいずれかでボタンの名前をプレフィックスまたはサフィックス付きで書き込む)

button_save_<activity_or_layout_name>
button_cancel_<activity_or_layout_name>

ただし、実行時には、ボタン ID は常にレイアウト ビューによって参照されます。アクティビティの に設定されているものsetContentView()

アップデート:

Activity2 で、Activity1 のレイアウトの ID を持つボタンを使用しているとします。現在の Activity2 ではボタンが参照されていないため、 NullPointerExceptionを取得できます。(Activity2 のレイアウトが異なるため)。

于 2013-02-16T11:29:42.277 に答える
4

私の意見では、ID に名前を付けるときは、最初にそれらを使用するアクティビティの名前を記述し、次にウィジェットのイニシャルを記述し、最後にその機能が何であれ、loginBSave、loginBCancel、activity2BSave、activity2BCancel などを記述する必要があります。互いに区別できるような名前を付けてください

例えば:

<activity_or_layout_name>_button_save
<activity_or_layout_name>_button_cancel
于 2013-02-16T11:30:03.167 に答える
1

複数のアクティビティ間で同じIDを共有しても問題はありません。実際、同じIDを同じアクティビティで何度も使用しても問題はありません。この場合、getViewById()を呼び出すと、同じ階層に同じIDのビューが多数ある場合に最初に検出されるビューが返されます。

この種の状況は通常、同じレイアウトをXMLファイルから複数回拡張する必要がある場合に発生します。同じIDを共有するすべてのビューを検索する必要がある場合は、検索するたびにsetId()を使用して各ビューのIDを変更するか、異なる開始点を指定する必要があります。

于 2013-02-16T13:17:18.327 に答える
0

レイアウト固有の要素については、レイアウト名の最初の文字で接頭辞を使用します。したがって、 という名前show_task_layout.xmlのレイアウトがある場合、その要素には名前stl_button_okなどがあります。

多くのアクティビティでコピーまたは表示される可能性のある特定の要素については、接頭辞なしで 1 つの名前を使用することを好みます。しかし、各レイアウトでこの方法に従うと、IDで要素が見つからない場合にデバッグするのが頭痛の種になります

于 2013-02-16T11:49:42.447 に答える