Ну, идентификаторы собираются изменить? Если нет, просто установите int [] идентификаторов TextView и выполните цикл, например ::
int[] ids = {
R.id.tv1, R.id.tv2, R.id.tv3 //...
}
for(int i : ids) {
TextView tv = (TextView)findViewById(i);
tv.setVisibility(View.INVISIBLE);
}
Я бы определенно не пытался использовать рефлексию, это было бы намного менее эффективно, чем делать это другими способами. Если вы не знаете идентификаторы TextView заранее, почему бы не попробовать что-то вроде этого (при условии, что ваш корневой макет является RelativeLayout):
RelativeLayout root = (RelativeLayout) findViewById (R.id.root);
for (int i = 0; i
Так как вы уже приняли, я предполагаю, что метод 1 сработал, потому что я только что понял, что ужасно отключился от метода 2. Это должен быть getChildAt(i)
, а не findViewById(i)
, поскольку это будет просто вызывать findViewById(0|1|2|...etc)
. Ниже исправленная версия:
RelativeLayout root = (RelativeLayout)findViewById(R.id.root);
for(int i = 0; i < root.getChildCount(); i++) {
View v = root.getChildAt(i);
if(v instanceof TextView) {
((TextView)v).setVisibility(View.INVISIBLE);
}
}
Я не проверял это, но в теории это звучит хорошо. :)