403 Stimmen

Android: View.setID(int id) programmatisch - wie vermeidet man ID-Konflikte?

Ich füge TextViews programmatisch in einer for-Schleife hinzu und füge sie zu einer ArrayList.

Wie verwende ich TextView.setId(int id) ? Welche Integer-ID muss ich mir ausdenken, damit sie nicht mit anderen IDs kollidiert?

683voto

X.Y. Punkte 13394

Ab API-Stufe 17 und höher können Sie aufrufen: View.generateViewId()

Dann verwenden Sie View.setId(int) .

Wenn Ihre Anwendung auf eine niedrigere API-Stufe als 17 ausgerichtet ist, verwenden Sie ViewCompat.generateViewId()

190voto

Sai Aditya Punkte 2266

Sie können die IDs, die Sie später verwenden werden, in R.id Klasse unter Verwendung einer XML-Ressourcendatei, und lassen Sie Android SDK die tatsächlichen eindeutigen Werte während der Kompilierungszeit festlegen.

 res/values/ids.xml

<item name="my_edit_text_1" type="id"/>
<item name="my_button_1" type="id"/>
<item name="my_time_picker_1" type="id"/>

Um sie im Code zu verwenden:

myEditTextView.setId(R.id.my_edit_text_1);

156voto

Nikolay Ivanov Punkte 8737

Nach Angaben von View Dokumentation

Der Bezeichner muss in der Hierarchie dieser Ansicht nicht eindeutig sein. Der Bezeichner sollte eine positive Zahl sein.

Sie können also jede beliebige positive ganze Zahl verwenden, aber in diesem Fall kann es einige Ansichten mit gleichwertigen IDs geben. Wenn Sie nach einer Ansicht in der Hierarchie suchen wollen, rufen Sie setTag mit einigen Schlüsselobjekten kann praktisch sein.

62voto

yenliangl Punkte 784

Sie können auch definieren ids.xml en res/values . Ein genaues Beispiel finden Sie im Beispielcode von Android.

samples/ApiDemos/src/com/example/android/apis/RadioGroup1.java
samples/ApiDemp/res/values/ids.xml

32voto

Diederik Punkte 4716

Seit API 17 ist die View Klasse hat eine statische Methode generateViewId() das wird

einen Wert erzeugen, der für die Verwendung in setId(int) geeignet ist

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X