2012-04-02 17 views
0

Ich habe ein benutzerdefiniertes Dialogfeld Layout, das zwei EditText Felder hat und ich habe zunächst die Sichtbarkeit auf GONE für beide (im Layout XML) festgelegt. Im Dialog onCreate möchte ich einen findViewByTag machen, um eines der beiden EditText Felder zu finden, damit ich die Sichtbarkeit auf VISIBLE setzen kann. Alles funktioniert, finde ich im Dialog, wenn ich die Sichtbarkeit im XML umschalte, aber ich weiß nicht, wie ich einen Verweis auf die Hauptansicht des Dialogs aus dem Dialog bekommen kann, damit ich findViewByTag aufrufen kann.findViewByTag innerhalb eines Dialogs

Ich bin das Layout in der OnCreate der Dialogklasse aufblasen, weil das das Beispiel ist, das ich gefunden habe. Ich bin bereit, dies zu ändern, wenn nötig, um die Referenz im Aufrufer zu erhalten und Sichtbarkeit festzulegen, bevor der Dialog angezeigt wird, wenn dies der beste Weg ist, dies zu tun.

Immer noch ziemlich neu bei Android, so dass alle Tipps, wie Sie am besten mit benutzerdefinierten Dialogen umgehen, geschätzt wird.

+0

findViewByTag funktioniert nur wie erwartet, wenn Ihre Objekte, die Sie als Tag setzen, ein "gut geschriebenes" equals haben. –

Antwort

0

Ich nehme dieses Beispiel von außerhalb einer Sichtklasse an.

Dialog amazingDialog = new Dialog(context); 

amazingDialog.setContentView(R.layout.amazingdialogcontentview) 
MyAmazingView view = (MyAmazingView)amazingDialog.findViewById(R.id.amazingview); 
TextView tv = (TextView)amazingDialog.findViewById(R.id.textview); 
0

Ich bin nicht sicher genau das, was Ihr Anwendungsfall ist, so kann es einen besseren Weg, dies zu tun, wenn Sie den Zugriff auf bestimmte Elementvariablen haben Sie in onCreate initialisieren können, aber wenn Sie dies nicht tun:

könnten Sie versuchen,

View parent = myDialog.findViewById(R.id.parentId) 

eine bekannte übergeordnete Ansicht jener EditTexts zu bekommen, und rufen Sie dann

parent.findViewWithTag(myTag) 

finden Sie Ihren EditText.

Mit Blick auf die Art, wie Sie Ihre Frage formuliert haben, und die Tatsache, dass Sie sagten, Sie seien neu bei Android, kennen Sie den Unterschied zwischen IDs und Tags?

Eine ID ist eine Ressourcennummer, die einem Objekt (z. B. einer Ansicht) von Android zugewiesen wird, wenn Sie ihm einen Namen geben. Sie würden erklären, in der XML-:

<TextView android:id="@+id/myTextView"/> <!--with other parameters as necessary--> 

Und dann würden Sie

TextView tv = (TextView)findViewById(R.id.myTextView); 

verwenden, um diesen Textview zu finden.

Ein Tag ist ein Objekt, das Sie an eine View anhängen können (was ich ziemlich sicher nicht mit XML tun kann), entweder um es später zu finden oder um einige interessante Informationen zu erhalten schau es dir an (wie ein Datenobjekt, das mit seinem Inhalt verknüpft ist). So könnte man sagen:

tv.setTag(myInterestingData); 

, so dass Sie später myInterestingData nur einen Verweis auf tv nachschauen könnte durch.

+0

Sie können die Tags in XML mit Android: Tag festlegen, was ich versuchte zu verwenden.Mein Ziel war es, die Bearbeitungsfelder zu finden, ohne die ID im Voraus zu kennen. Tag ermöglicht das, wenn sie gut gebildet sind. – Dave

0

Nach viel Lesen und Versuch und Irrtum, habe ich festgestellt, dass die einzige Möglichkeit, dies zu tun ist, mehrere EditText in der XML verwenden, alle mit Sichtbarkeit = "gegangen". Dann, im Java-Code, haben Sie ein if oder wechseln Sie zum Nachschlagen und zeigen Sie das Steuerelement entweder per Tag oder per ID. Ich habe gerade versucht, zu viel Abstraktion in die Dialog-Klasse zu zwingen. Mit dem multiplen EditText kann ich die Klasse für mehrere Dialoge verwenden, anstatt für jeden Dialog eine Klasse zu haben.

Verwandte Themen