2012-07-09 11 views
15

Ho letto probabilmente tutti i post e la documentazione, ma non riesco ancora a risolvere questo problema.addView non funziona

Desidero utilizzare il metodo addView() per aggiungere la visualizzazione al layout esistente (in esecuzione) ma per qualche motivo non posso. So che questo dovrebbe essere facile e di base, ma ancora non riesco a farlo. Quindi, per favore aiutami.

Ecco un codice:

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

Questo è un codice, e il risultato è che ho mostrato solo una vista che sono definiti nel file xml. Non c'è questa nuova visione che ho aggiunto. Quando eseguo il debug, vedo questa vista aggiunta come figlio del genitore a cui l'ho aggiunta ma non viene visualizzata.

qui è 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> 

prega di aiuto. Questo mi farà impazzire!

+0

Potresti aggiungere il layout in cui vuoi aggiungere il 'TextView'? – Luksprog

+0

Hey Luksprog, era perché android: layout_height = "fill_parent" negli attributi LinearLayout. Ora ho visualizzato il testo ma nella parte inferiore dello schermo. Come metterlo in cima? Mi hai aiutato. Indirettamente, ma ancora. Tnx molto. – Majstor

+1

Se vuoi mettere quel 'TextView' in una certa posizione dovresti usare un altro aroma del metodo' addView' che prende un int, la posizione dove mettere il nuovo 'View', qualcosa come questo:' addView (testo, 0); ' – Luksprog

risposta

15

Si è dimenticato di specificare LayoutParameters per la vista appena aggiunta.

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); 

EDIT

Il GridView con ID @+id/gridview è definita con un'altezza di layout di fill_parent, lasciando con nessuno spazio per aggiungere una nuova vista. Cambiare la sua altezza a wrap_content potrebbe risolvere il tuo problema.

Aggiungendo il mio commento a questo post per aiutare gli altri a verificare facilmente la soluzione.

+0

Quali parametri devo assegnare? Ho provato ad aggiungere margine, larghezza, altezza ma ancora nulla .. – Majstor

+0

Puoi pubblicare il tuo file mainlayout.xml? Perché il codice di Arun funziona anche per me – firefistace

+0

Ho provato il tuo codice e ancora niente. È lì come un figlio di quel genitore ma non viene visualizzato. Hai altre idee? Grazie per il tuo impegno. – Majstor

-1

Non ricordo, ma forse esiste un metodo di "aggiornamento" per caricare nuovamente il layout.

Provare layout.invalidate();

+0

Provato, ancora niente. Hai altre idee? – Majstor

+0

@Majstor il 'Invalidate();' deve essere chiamato nel layout di primo livello, lo hai chiamato da quell'oggetto? – ForceMagic

+2

Le chiamate addView sono già state annullate. –

1

Ho avuto lo stesso problema e ho perso parecchio tempo a trovare il motivo.

L'errore era che stavo aggiungendo un CustomView che aveva match_parent impostato come altezza.

spero di risparmiare un po 'di tempo prezioso a chi ha fatto questo fastidioso errore stupido :)

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

Il contenuto LinearLayout è finita View del genitore. quindi è necessario utilizzare ScrollView. come questo:

<?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> 
Problemi correlati