У меня есть ViewGroup, определенная в XML с представлением внутри, в onCreate time, я бы хотел иметь переменную из них.
Я не хочу переживать трудности с использованием адаптера listview +, потому что он явно переполняется, поскольку я знаю, что список не изменится, поскольку onCreate()
Это более или менее код, который я хотел бы иметь.
TextView mytextview = myViewGroup.findViewById(R.id.mytext);
for(String test : strings){
mytextview = mytextview.clone();
mytextview.setText(test);
myViewGroup.addView(mytextview);
}
Но он не работает.
Ответ 1
Возможно, используйте надуватель и поместите текстовое изображение во внешний файл макета:
View v = LayoutInflater.from(this).inflate(R.layout.textview_include, null);
viewGroup.addView(v);
Ответ 2
Если вы сделаете это, вы, скорее всего, получите тот же самый идентификатор для каждого созданного таким образом вида. Это значит делать такие вещи, как ((TextView) v).setText( "некоторый текст" ); будет вызываться на каждом TextView, предварительно завышенном от того же макета. Вы все равно можете это сделать, но вы должны вызвать setId() и иметь разумный метод для обеспечения того, чтобы вы не получали одинаковый идентификатор дважды в строке - инкремент или универсальное время и т.д.
Кроме того, я думаю, что Android резервирует определенный диапазон идентификаторов для динамически созданных идентификаторов. Вы можете избежать ID в этом диапазоне; но, честно говоря, я не знаю, как работает система id, поэтому я могу ошибаться в этом вопросе.
Ответ 3
Используя код Матиаса Лин и используя подсказку от javahead76:
LinearLayout x = (LinearLayout) findViewById(R.id.container);
for (int i = 0; i < 5; i++) {
View c = LayoutInflater.from(this).inflate(R.layout.singlerow, x);
TextView t = ((TextView)findViewById(R.id.textView1));
t.setId(i+10000);
t.setText("text"+i);
}
TextView b = (TextView) findViewById(10003);
b.setText("10003");