0

これは、setId()メソッドの説明です。

void  android.view.View.setId(int id)

public void setId(int id)

以来:APIレベル1

このビューの識別子を設定します。識別子は、このビューの階層で一意である必要はありません。識別子は正の数である必要があります。

私の質問は、XMLファイルで一意のIDを割り当てるのに、なぜ識別子がこのビューの階層で一意である必要がないのかということです。

4

2 に答える 2

4

私の質問は、xml ファイルで一意の ID を割り当てているのに、このビューの階層で識別子を一意にする必要がないのはなぜですか?

XML ファイル内で一意である必要はandroid:idありませんが、通常はそのように記述します。

ウィジェット ID が一意である必要がない理由を理解するには、ListView. ListView8 行の があるとしましょう。これらの各行は、レイアウト XML リソース (例: android.R.layout.simple_list_item_1) を膨張させることによって作成されます。これらの膨張した各行は、の子ですListView。ただし、これらの各行は同じレイアウト リソースからインフレートされるため、各行のウィジェットは他のすべての行と同じ ID を持ちます。

これは一般的に問題ではありません。これは、Android 開発の基本ルールの 1 つにつながります。それは、求めるウィジェットに固有の結果をもたらす何かを常に呼び出すfindViewById()ことです。この場合、すべて同じ ID を持つ 8 つのウィジェットがあり、どの行のウィジェットが返されるかわからないため、 行の 1 つの内部でウィジェットを検索するためfindViewById()ListViewまたはを呼び出したくありません。Activity代わりに、その特定の行から特定のウィジェットを取得するためfindViewById()に、行を呼び出す必要があります。

于 2012-06-04T11:48:15.480 に答える
2

ID は一意である必要はありません。任意の正の整数を使用できますが、この場合、同等の ID を持つビューがいくつか存在する可能性があります。

また、Romain Guy はこの投稿で次のように述べています。

findViewById()深さ優先探索アルゴリズムです。見つかった指定された ID の最初のビューを返します。

于 2012-06-04T12:01:13.400 に答える