2012-07-09 8 views
15

He leído probablemente todas las publicaciones y la documentación, pero todavía no puedo resolver este problema.addView no funciona

Quiero usar el método addView() para agregar vista al diseño existente (en ejecución) pero por alguna razón no puedo. Sé que esto debería ser fácil y básico, pero aún así no puedo hacerlo. Entonces, por favor ayudame

Aquí es un código:

LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout); 
     TextView text=new TextView(this); 
     text.setText("test"); 
     layout.addView(text); 

Eso es un código, y el resultado es que he mostrado sólo puntos de vista que se definen en el archivo xml. No hay esta nueva vista que he agregado. Cuando depuro, veo esta vista añadida como hija del padre al que la he agregado, pero no se muestra.

aquí es main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 
       android:id="@+id/mainLayout" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:orientation="vertical" 
       android:background="@drawable/main1" > 
    <TextView android:id="@+id/app_title" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:textColor="#FFF" 
       android:text="@string/app_title" 
       android:textSize="25dp" 
       android:gravity="center_horizontal"/> 
    <TextView android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="5dp" 
       android:text="@string/main_screen_counter_title" 
       android:textSize="15dp" 
       android:textColor="#FFF" 
       android:gravity="center_horizontal"/> 
    <TextView android:id="@+id/frontScreenCounter" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:textColor="#FFF" 
       android:text="@string/reading" 
       android:textSize="33dp" 
       android:gravity="center_horizontal" /> 
    <GridView android:id="@+id/gridview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:columnWidth="90dp" 
    android:numColumns="3" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" 
    android:textColor="#888" 
/> 
    </LinearLayout> 

por favor ayuda. ¡Esto me volverá loco!

+0

¿Podría agregar el diseño donde desea agregar el 'TextView'? – Luksprog

+0

Hola Luksprog, fue porque android: layout_height = "fill_parent" en los atributos de LinearLayout. Ahora he mostrado texto pero en la parte inferior de la pantalla. ¿Cómo ponerlo en la cima? Tú me has ayudado. Indirectamente, pero aún. Muchas gracias. – Majstor

+1

Si desea colocar ese 'TextView' en una posición determinada, debe usar otro sabor del método' addView' que toma un int, la posición donde poner el nuevo 'View', algo como esto:' addView (texto, 0); ' – Luksprog

Respuesta

15

Olvidó especificar el LayoutParameters para la vista recién agregada.

LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout); 
    TextView text=new TextView(this); 
    text.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    text.setText("test"); 
    layout.addView(text); 

EDITAR

El GridView con un id de @+id/gridview se define con una altura de diseño fill_parent, dejándole sin espacio para añadir un nuevo punto de vista. Cambiar su altura al wrap_content puede resolver su problema.

Agregando mi comentario a esta publicación para ayudar a otros a verificar fácilmente la solución.

+0

¿Qué parámetros debo asignar? Intenté agregar margen, ancho, alto, pero todavía nada. – Majstor

+0

¿Puedes publicar tu mainlayout.xml? Porque el código de Arun también funciona para mí – firefistace

+0

Probé tu código y aún nada. Está allí como hijo de ese padre pero no se muestra. ¿Tienes más ideas? Tnx por tu esfuerzo. – Majstor

-1

No recuerdo, pero tal vez haya algún método de "actualización" para volver a cargar el diseño.

Pruebe layout.invalidate();

+0

Intentó, todavía nada. ¿Tienes más ideas? – Majstor

+0

@Majstor debe invocarse el 'Invalidate();' en el diseño de nivel superior, ¿lo llamó desde ese objeto? – ForceMagic

+2

las llamadas a addView ya invalidan. –

1

Tuve el mismo problema y perdí varias veces la razón.

Mi error fue que estaba agregando un CustomView que tenía match_parent establecido como alto.

espero ahorrar un tiempo precioso para cualquier persona que hizo este error molesto tonta :)

TextView tv = new TextView(this); 
lytMarks.addView(tv); 


CustomView cv = new CustomView(this, someObject); 
lytMarks.addView(cv); // <-- This one had height = match_parent!! 


EditText et = new EditText(this); 
lytMarks.addView(et); 
0

Su contenido es de más LinearLayout Vista de los padres. entonces necesitas usar ScrollView. como este:

<?xml version="1.0" encoding="utf-8"?> 

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

<LinearLayout 
    android:id="@+id/mainLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/main1" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/app_title" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal" 
     android:text="@string/app_title" 
     android:textColor="#FFF" 
     android:textSize="25dp" /> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="5dp" 
     android:gravity="center_horizontal" 
     android:text="@string/main_screen_counter_title" 
     android:textColor="#FFF" 
     android:textSize="15dp" /> 

    <TextView 
     android:id="@+id/frontScreenCounter" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal" 
     android:text="@string/reading" 
     android:textColor="#FFF" 
     android:textSize="33dp" /> 

    <GridView 
     android:id="@+id/gridview" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:columnWidth="90dp" 
     android:gravity="center" 
     android:horizontalSpacing="10dp" 
     android:numColumns="3" 
     android:stretchMode="columnWidth" 
     android:textColor="#888" 
     android:verticalSpacing="10dp" /> 
</LinearLayout> 
</ScrollView>