2012-07-20 3 views
13

Ich bin mir nicht sicher, ob jemand mit diesem Problem vorher schon abgehört wurde, aber es ist ein großer Schmerz für mich.Wie lautet die beste Vorgehensweise zum Benennen der ID von XML-Elementen in Android?

Wie geben Sie eine ID zu Xml-Element in Android?

Im Moment, ich habe die ID mit dem Muster [Aktivität/Fragment Name] [Elementtyp] [spezifischer Name]. Zum Beispiel, wenn ich einen EditText hatte, um eine Email zu behalten, die in LoginActivity verwendet wird, werde ich die ID 'LoginEditTextEmail' geben.

Das Problem, mit dem ich konfrontiert bin, ist, dass mit diesem Ansatz die ID oft in einem sehr langen endet.

Wie stellen Sie die ID ein? Was ist die beste Praxis?

Antwort

5

Sie verkomplizieren Dinge. Nenne es einfach so, wie es dir unvergesslich ist. IDs müssen nur für XML eindeutig sein (d. H. Sie können 50 verschiedene Layouts mit der ID my_edittext haben), da Sie eine Ansicht anhand ihrer ID nur über eine einzelne Ansichtshierarchie finden.

+0

Ah, ich verstehe. Vielen Dank, dass @kcoppock, wenn die ID nur in einer einzigen Ansichtshierarchie eindeutig sein muss, dann ist es klar, andere Chunks zu verlassen. ; D –

+0

@kcoppock, wird es ein Problem für Geschwisterfragmente oder verschachtelte Fragmente? – bcorso

+0

Kann sein, wenn Sie nach Fragmentsichten aus der Aktivität suchen, aber wenn Sie alle Ihre Ansichtsmanipulationen innerhalb des Fragments durchführen (was Sie normalerweise tun sollten), ist das kein Problem. – kcoppock

1

So wie ich alles nenne, tendiere ich dazu, den kürzesten Namen zu verwenden, der ihn genau beschreibt. Stellen Sie bei IDs für Layouts sicher, dass jede ID in Ihrem Layout eindeutig ist (Sie können dieselbe ID in einem anderen Layout wiederverwenden).

12

Beschreibende Namen sind ideal (das gleiche wie mit dem Namen für jede Variable in einer Programmiersprache).

Ich glaube, Sie haben ein gutes System bereits würde ich diese potentiellen Möglichkeiten bieten die Größe Ihrer IDs zu verringern

[Aktivität/Fragmentname] - Persönlich würde ich diese fallen, neige ich dazu, ein Layout zu verwenden, Datei pro Aktivität/Fragment sowieso, so dass es nicht verwirrend ist, in welcher Aktivität die Ansicht sein soll. Außerdem gibt es Zeiten, in denen ich einige View-Widgets in mehreren Aktivitäten wiederverwende und sie mit der gleichen ID belasse, damit der Code zu finden und interagieren sie ist vereinfacht (dh es kann kopiert werden/einfügen oder in eine Unterklasse der Aktivität)

[element type] - Ich verwende einen 3-Buchstaben-Abkürzung für die Widget-Typen:

  • Edt = EditText
  • Txt = Textview
  • Lbl = Textview, die für die Kennzeichnung etwas
  • Btn = Taste
  • Prg statisch = ProgressBar
  • Lyt = Layout
  • etc ...

[spezifischer Name] - hier keine wirkliche Verbesserung, es muss so lange sein, wie es sein muss, um zu beschreiben, wofür es ist.

+1

Danke @Tim, wenn ich den Aktivitäts-/Fragmentnamen hinterlassen könnte, dann ist es das Beste. Ich fügte hinzu, dass ich das ID-Lookup-Verfahren nicht gut genug verstanden habe. –

+1

Sie können es natürlich in =) lassen, ich persönlich tendiere nur dazu, das nicht zu benutzen. – FoamyGuy

0

Tropfen Fragment, Aktivität und Art, wenn Sie diese bei der Codierung qualifizieren, so:

boolean isLoggedIn = false;

android:id="@+id/is_logged_in"

Wie in anderen Antworten erwähnt die XML bietet den Qualifier, jetzt müssen Sie entscheiden, ob Konsistenz und/oder Weiterqualifikation ist notwendig und wenn es passt. Müssen Sie sich wirklich qualifizieren und wenn Sie das nicht tun, wird der Code von Ihnen oder jemand anderem viel härter sein?

Und was ist mit strings.xml?

Präfix die ID mit einem Frag oder Aktivitätskennzeichner. So zum Beispiel:

<string name="profile_is_logged_in_true">Logged in.</string>

<string name="profile_is_logged_in_false">Not logged in.%</string>

Auch & hellip;

<plurals name="plural_is_logged_in_duration">...

Ich habe gespielt mit:

<string name="profile_isloggedin_false">Not logged in.</string>

aber noch nicht überzeugt. Dies ist eigentlich ein Klassifizierungsproblem, das inzwischen in anderen Disziplinen durch Tagging gelöst wurde. Java bietet gepunktetes Namespace und Typ-Qualifikation, so

com.example.android.app.profile.State.isLoggedIn

Android verwenden Dinge wie R.string :-) Also Sie das Java sowie einige zusätzliche Namespace von Android haben. Vergessen Sie nicht, Sie können mehr als einen String-Ressourcen-Datei haben, so vielleicht:

res/values/widget_defaults.xml

einige Standardwerte für etwa eine TextView enthalten könnten. Die wahren und falschen Strings sollten von Plural behandelt werden - aber das Beispiel hilft hoffentlich, trotz ein bisschen erfunden.

Verwandte Themen