2010-10-10 6 views
13

Tengo un ViewGroup definido en XML con una vista dentro, en onCreate time me gustaría tener una variable de esos.
No quiero pasar por la molestia de usar un adaptador listview + porque es claramente excesivo ya que sé que la lista no cambiará ya que onCreate()
Este es más o menos el código que me gustaría tener .Clonar vista de texto para anexarlo a un ViewGroup

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

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

Pero no está funcionando.

+0

¿Cuál es el resultado actual su conseguir? ¿MyTextView solo es visible una vez? –

+0

He agregado una respuesta aquí http://stackoverflow.com/a/15761866/884674 para ver si funciona para usted. –

Respuesta

19

utilizan Tal vez una de inflado, y poner el TextView en un archivo de diseño externo:

View v = LayoutInflater.from(this).inflate(R.layout.textview_include, null); 
viewGroup.addView(v); 
+1

¿Qué debo hacer si no puedo usar un inflador? – suitianshi

1

Si lo hace, lo más probable es obtener exactamente el mismo ID para cada vista creada de esta manera. Esto significa hacer cosas como ((TextView) v) .setText ("some text"); se invocará en cada TextView previamente inflado desde el mismo diseño. Todavía puede hacerlo de esta manera, pero debe llamar a setId() y tener algún método razonable para asegurarse de no obtener el mismo ID dos veces seguidas: incremento o tiempo universal, etc.

Además, creo que Android reserva un cierto rango de id para los id dinámicamente creados. Puede evitar identificaciones en este rango; pero sinceramente, no sé si el sistema de identificación funciona, así que podría estar equivocado en este punto.

0

Mediante el código de Mathias Lin y el uso de la pista de 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"); 
+1

¿Cuál es el propósito de 'findViewById' al final del bucle' for'? Esa función devuelve 'Ver' para id' 0' a '4' (en su caso), pero no la usa en ninguna parte. –

+0

@ Pimp Trizkit Tienes razón, me olvidé de eliminarlo. Es código viejo. –

Cuestiones relacionadas