2010-11-11 5 views
6

Derzeit bin ich vorsichtig, verschiedene IDs für jedes Widget zu verwenden, aber wenn ich die gleiche ID für einige Widgets in verschiedenen Layout-XML-Dateien verwenden würde, was würde mit meinen Aufrufen von findViewById passieren? Würde es verwirren und ein Widget aus der falschen Layoutdatei zurückgeben?Was passiert, wenn ich dieselbe ID für mehrere Widgets in verschiedenen Layouts verwende?

Ich frage, weil ich in einigen anderen Ansichten daran gedacht habe, eine Ansicht (mit einer Reihe von Schaltflächen) einzubeziehen, dann müsste jede dieser Bildschirmklassen jeder Schaltfläche in der enthaltenen Ansicht ein etwas anderes Verhalten zuweisen. Um das zu tun, würden sie findViewById für dieselbe ID aufrufen. derzeit Zum Beispiel mag ich diese in jeder Datei:

final ImageButton homeButton = (ImageButton)this.findViewById(R.id.rshome_button); 
homeButton.setOnClickListener(new BottomButtonClickListener()); 

final ImageButton hotButton = (ImageButton)this.findViewById(R.id.rshotlist_button); 
hotButton.setOnClickListener(new BottomButtonClickListener()); 

final ImageButton locButton = (ImageButton)this.findViewById(R.id.rsbot_map); 
locButton.setOnClickListener(new BottomButtonClickListener()); 

final ImageButton sendButton = (ImageButton)this.findViewById(R.id.rssend_button); 
sendButton.setOnClickListener(new BottomButtonClickListener()); 

Aber ich ändern, um die R.id in jeder Datei auf das Widget in jedem assiciated Layout zu zeigen. es wäre schön, wenn ich die eine R.id für alle verwenden könnte, so dass ich nicht jede Layoutdatei und jede Bildschirmklasse optimieren muss.

Dank

Antwort

3

Es sollte so lange in Ordnung sein, wie Sie beiden Layouts in der gleichen Aktivität nicht instanziiert. Aber ich habe es nie versucht.

Allerdings wäre ich nicht überrascht, wenn der Android-Code-Generator, obwohl es wahrscheinlich versuchen wird, zwei R.id.rshome_button Einträge in Ihrer R.java Datei zu erstellen.

+1

Also wie weiß es, welches das ist, das wir suchen? – GMsoF

-1

Der beste Weg Sie es selbst ausprobieren.

Aber Sie tun setContentView (R.layout.your_layout);

Also, wenn Sie findViewById nennen es wird mit angegebenen ID für ein Widget betrachtet werden your_layout

Deshalb sollten Sie gleiche ids in verschiedenen Layouts.

+0

R.id.view_id ist eine statische Ganzzahl, die zur Kompilierzeit generiert wird, bevor setContentView() ausgeführt wird. – Chloe

8

Ja, Sie können dieselben id s in verschiedenen Layouts verwenden. In der Tat kann es eine gute Übung sein.

Verwandte Themen