2011-01-08 5 views
14

Sto gonfiando un RelativeLayout dall'XML e poi cerco di impostare a livello di programmazione i suoi parametri di layout e sto ricevendo un ClassCastException.Imposta i parametri di layout RelativeLayout a livello di codice - genera ClassCastException

Codice:

profileHeader = (RelativeLayout)mInflater.inflate(R.layout.user_profile_header, null); 
profileHeader.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT)); 

tiri

E/AndroidRuntime(2963): java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams 
E/AndroidRuntime(2963): at android.widget.ListView.measureScrapChild(ListView.java:1119) 
E/AndroidRuntime(2963): at android.widget.ListView.measureHeightOfChildren(ListView.java:1202) 
E/AndroidRuntime(2963): at android.widget.ListView.onMeasure(ListView.java:1111) 
E/AndroidRuntime(2963): at android.view.View.measure(View.java:8222) 
E/AndroidRuntime(2963): at android.view.ViewGroup.measureChildWithMargins(V 

Ho visto altre note sulla rete per provare a utilizzare LinearLayout.LayoutParams ma quello non sembrano aiutare.

Se ti stai chiedendo perché sto facendo questo e NON lo applico semplicemente nell'XML perché sto vedendo qualcosa di strano dove il layout "salta" a un wrap/wrap. I AM impostandolo su fill_parent/fill_parent nell'XML e facendo scorrere la vista "si restringe" a ciò che sembra essere un wrap/wrap. È davvero strano. Guardando il codice sorgente di Android foursquared ho trovato un commento in cui lo sviluppatore dice la stessa cosa:.

"Qualcosa di strano sta succedendo con i parametri di layout ma se non abbiamo impostato in modo esplicito il layout da riempire/riempire dopo gonfiandosi, il layout salta a un layout a capo/a capo ". (FriendsActivity.java:258)

Che suona proprio come il mio problema, quindi sto cercando di fare lo stesso (imposta il layout tramite codice), ma nel suo caso sta usando LinearLayout, mentre sto usando RelativeLayout.

Cosa mi manca? Grazie in anticipo.

risposta

69

I parametri di layout devono essere del tipo del genitore. Quindi, se stai creando un RelativeLayout e lo aggiungi a un ListView, i parametri di layout devono essere di tipo ListView.LayoutParams, non RelativeLayout.LayoutParams. Il modo corretto per farlo è chiamare gonfiare in questo modo:

gonfiare (R.layout.mylayout, theListView, false);

Questa versione di inflate() gonfierà correttamente i parametri di layout (android: layout_ *) definiti in XML.

+0

Grazie Romain, questo non rispondere alla domanda e mi permette di impostare il RelativeLayout params di programmazione. Sfortunatamente speravo che avrebbe risolto il mio problema di impedire che la vista "saltasse" su un involucro/involucro in scroll (si restringe visibilmente verso il basso su scroll, quindi torna alla normalità al rilascio). Ma non ha risolto il problema. Molto strano. –

+0

Non posso aiutarti in questo secondo numero senza ulteriori informazioni sul codice. È davvero molto strano :) –

Problemi correlati