2010-11-10 17 views
8

Próbuję zmodyfikować dwa widoki tekstowe dokładnie w ten sam sposób. Myślałem, że mogę nadać im ten sam identyfikator, a metody findViewById() i setText() zmieniają te widoki tekstowe w dwóch wierszach. Ale wygląda na to, że tylko jeden TextView został zmieniony.Dwa elementy XML o tym samym identyfikatorze

Czy istnieje sposób, aby to zrobić? Czy muszę tworzyć różne identyfikatory dla każdego elementu, zdobyć każdy element metodą findViewById() i ustawić jego tekst?

+0

Dlaczego miałbyś to zrobić? – Macarse

+1

Android! = JQuery – Felix

+0

Dlaczego miałbym to zrobić? Mam dwa LinearLayouts na widget, które są budowane różne (różne wartości grawitacji elementów). Pomyślałem, że łatwiej będzie zrobić dwa różne układy i sprawić, by jeden był widoczny, a drugi znikł, gdy był potrzebny. – Seraphis

Odpowiedz

5

Wyświetl identyfikatory są zwykłymi liczbami całkowitymi, więc możesz po prostu mieć tablicę identyfikatorów, które chcesz zmienić. Na przykład:

int[] ids = { R.id.text1, R.id.text2, ... }; 
for (int id: ids) { 
    TextView tv = (TextView) findViewById(id); 
    tv.setText("Hello, World!"); 
} 

Oczywiście, najlepiej byłoby mieć ids jako statyczny końcowym członka klasy. Np .:

public class MyActivity extends Activity { 
    private static final int[] textViewIDs = { 
     R.id.text1, 
     R.id.text2, 
     ... 
    } 
    ... 
} 
+0

Widzę, że to jedyne rozwiązanie mojego problemu. Dziękuję Ci – Seraphis

0

Musisz zdefiniować dwa różne identyfikatory. Nie ma sposobu, aby mieć widżet o tym samym id, co inny, ponieważ oba są dwoma różnymi i niezależnymi widżetami.

0

Ident jest unikalny dla każdego widoku. Nie można udostępnić. To, co możesz zrobić, to mieć oba identyfikatory wyświetleń w kodzie i mieć warunki do modyfikacji tekstu. Podobnie jak (id == id1 & & id == id2), następnie edytuj tekst.

+0

Co masz na myśli mówiąc "mieć oba identyfikatory w kodzie"? Czy możesz mi wyjaśnić, który TextView byłby modyfikowany w tym stanie? – Seraphis

Powiązane problemy