2010-12-20 2 views
1

Für meine Android-Anwendung möchte ich eine Ansicht haben, die einem Benutzer ermöglicht, auf eine Plusschaltfläche zu klicken, um EditText-Felder hinzuzufügen, und neben den EditText-Feldern möchte ich Minusschaltflächen haben, die sie aus der Ansicht entfernen. Im Wesentlichen ähnelt das dem Hinzufügen mehrerer Telefonnummern/E-Mail-Adressen in der Kontakt bearbeiten-Oberfläche von Android.Android - Wie blende ich eine Ansicht mit mehreren EditText-Feldern auf und lese deren Werte?

Ich stelle mir vor, ich muss dies tun, indem ich meine Hauptansicht mit einem separaten aufblähen, der den EditText und die Schaltfläche enthält, die ich jedes Mal hinzufügen möchte. Ich habe jedoch keine Ahnung, wie ich jeden EditText und jede Schaltfläche mit einer eindeutigen ID identifizieren kann, und daher habe ich keine Ahnung, wie ich die Werte jedes EditText zum Speichern in meiner Datenbank abrufen könnte. Kann mir jemand Tipps geben, was ich tun muss? Vielen Dank.

Antwort

2

Wenn Sie ein Unter Layout aufgeblasen haben, dann sollten Sie haben jetzt ein View Objekt.

Sie können dann findViewById(R.id.edit_text_1) unter der View — aufrufen, vorausgesetzt, Sie haben IDs im Sublayout-XML angegeben.

Solange Sie über jeden der Eltern View s verfolgen, können Sie immer findViewById() auf ihnen verwenden. Oder nach der Inflation, wenn Sie wirklich wollen, können Sie eine neue, global eindeutige ID auf jedem EditText mit setId() setzen.

+0

Was passiert, wenn ich in meinem Unterlayout mehrere EditTexts nebeneinander, in RelativeLayout eingeschlossen und Layoutattribute wie "layout_below", "layout_toRightOf" habe? Müsste ich diese Attribute ändern, wenn ich die IDs aller EditTexts ändere? – Keeb13r

+0

Und gibt es keine Möglichkeit, eine Zeichenfolge als ID des Elements festzulegen? Es scheint absolut kontraintuitiv, dass "setId()" nur einen int als Argument akzeptiert. – Keeb13r

+0

Sie können einen * Verweis * auf eine Zeichenfolge als ID festlegen, aber keine willkürliche Zeichenfolge, die zur Laufzeit definiert wird. Aber ich glaube nicht, dass es notwendig ist, IDs zu ändern. Solange Sie den Überblick über die übergeordneten Ansichten behalten, die Sie vermutlich trotzdem benötigen, müssen Sie die IDs der untergeordneten Ansichten nicht neu festlegen. –

0

Sie können ein Ansichts-Widget dynamisch zuweisen und bei der Zuweisung eine eigene ID generieren.

Button b = new Button(this); 
b.setId(myId); 

Dann können Sie wieder auf dieses Widget verweisen.

findViewById(myId); 
+0

Sagen wir, dass ich [dieses Beispiel] folgen möchte (http://stackoverflow.com/questions/4299924/inflating-a-view-multiple-times-in-the-same-parent-when-a-button -ist-geklickt). Die Wrapper-Ansicht wurde bereits mit der Unteransicht aufgebläht, wenn ich auf die Hinzufügen-Schaltfläche klicke. Nun, wie setze ich die IDs dieser neuen Elemente, da sie vermutlich bereits vom Inflator erstellt wurden (also "Button b = new Button (this)" unnötig machen)? Oder wie kann ich zur Datenspeicherung auf sie verweisen? – Keeb13r

Verwandte Themen