Клонировать текстовое представление, чтобы добавить его в ViewGroup - PullRequest
13 голосов
/ 10 октября 2010

У меня есть ViewGroup, определенная в XML с представлением внутри, во время onCreate я хотел бы иметь их переменную.
Я не хочу испытывать трудности с использованием адаптера listview +, потому что егоочевидно, излишний, поскольку я знаю, что список не изменится, так как onCreate ()
Это более или менее тот код, который я хотел бы иметь.

TextView mytextview = myViewGroup.findViewById(R.id.mytext);

for(String test : strings){
  mytextview = mytextview.clone();
  mytextview.setText(test);
  myViewGroup.addView(mytextview);
}

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

Ответы [ 3 ]

19 голосов
/ 10 октября 2010

Может быть использовать инфлятор и поместить текстовое представление во внешний файл макета:

View v = LayoutInflater.from(this).inflate(R.layout.textview_include, null);
viewGroup.addView(v);
1 голос
/ 24 июля 2012

Если вы сделаете это, вы, скорее всего, получите точно такой же идентификатор для каждого представления, созданного таким образом. Это означает выполнение таких действий, как ((TextView) v) .setText («некоторый текст»); будет вызываться для каждого TextView, ранее накачанного из того же макета. Вы все еще можете сделать это таким образом, но вы должны вызвать setId () и иметь какой-то разумный метод для обеспечения того, чтобы вы не получали один и тот же идентификатор дважды подряд - увеличение или универсальное время и т. Д.

Кроме того, я думаю, что Android резервирует определенный диапазон идентификаторов для динамически создаваемых идентификаторов. Вы можете избежать идентификаторов в этом диапазоне; но, честно говоря, я не знаю, работает ли система id, поэтому я могу ошибаться в этом вопросе.

0 голосов
/ 20 января 2013

Используя код Матиаса Лин и используя подсказку от 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");
...