Подтвердить что ты не робот

Клонировать текст для добавления в ViewGroup

У меня есть 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);
}

Но он не работает.

4b9b3361

Ответ 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");