2012-03-30 2 views
0

Ich habe eine Umfrage von IDs (ids.xml), und ich erteile IDs für Ansichten, die ich dynamisch erstelle. Jetzt ist meine Frage ziemlich einfach - angenommen, ich erstelle eine neue Ansicht und weise ihr eine ID mit setId() in Verbindung mit R.id.uniqueId zu. Kann ich später mit findViewById(R.id.uniqueId) auf die Ansicht zugreifen?Android - findViewById() und dynamische Einstellung der IDs

Wenn ja, was könnte der Grund dafür sein, dass null zurückgegeben wird?

ist hier ein Spielzeug Beispiel: AKTUALISIERT

LinearLayout l = new LinearLayout(this); 
l.setId(R.id.mId); 
setContentView(l); //i see on screen the views added to 'l' 
l = (LinearLayout) findViewById(R.id.mId); //it returns null :(

Wie kommt es nicht \ Karte zu der Ansicht, die assgined ID nicht registrieren zugewiesen wurde?

+0

Haben Sie Lösung Ihrer Frage finden? Ich habe dasselbe Problem mit der dynamisch hinzugefügten Ansicht. – Nik

Antwort

2

Hat Ihre gewünschte Ansicht eine Elternansicht, mit der Sie parent.findViewById aufrufen können? Das kann helfen, Ihr Problem einzugrenzen.

Eine Sache, bemerkte ich, dass von Ihrem kurzes Beispiel fehlt: Sie sicherstellen müssen, dass Sie die neue Linearlayout der Ansicht Hierarchie sind hinzufügen, bevor Sie es mit findViewById zu finden in der Lage:

findViewById(R.id.parent).addView(l) 

Sie Sie können auch die hierarchy viewer verwenden, um einen Blick darauf zu werfen, ob alles richtig eingerichtet ist.

+0

Danke für Ihre Antwort quittieren. Das lineare Layout ist das primäre, d. H. Das erste, das ich dynamisch erstelle und zuweise. Also zu welchem ​​Elternteil soll ich es hinzufügen? – MrRoth

+0

Sie würden setContentView (l) sagen. –

+0

Aber das ist, was ich getan habe, siehe meine ursprüngliche Post. – MrRoth

0

Von dem, was Sie uns gegeben haben, scheint es, dass die Ansicht nie zur Ansicht der Aktivität hinzugefügt wird. Dies ist erforderlich, da findViewById die Ansicht der Aktivität als übergeordnetes Element verwendet, um eine untergeordnete Ansicht mit dieser ID zu finden.

Wenn Sie die Ansicht erstellen, können Sie sie immer als Elementvariable erstellen und auf diese Weise verweisen, wenn Sie sie zu einem späteren Zeitpunkt zu einer Ansicht hinzufügen möchten. Bitte beachten Sie, dass die Ansicht hinzugefügt werden muss nach die ID wurde festgelegt.

+0

Danke für die Antwort. Das lineare Layout ist das primäre, d. H. Das erste Layout, das ich dynamisch ID erstelle und ihm zuweise. Wie füge ich es zur laufenden Aktivität ('' this'') hinzu? – MrRoth