2011-01-08 4 views
14

XMLからRelativeLayoutを膨らませてから、レイアウトパラメータをプログラムで設定しようとしていて、ClassCastExceptionを受け取っています。RelativeLayoutレイアウトパラメータをプログラムで設定する - ClassCastExceptionをスローする

コード:

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

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 

を投げる私はLinearLayout.LayoutParamsを使用しようとするネット上の他のノートを見てきましたが、それdoesntのは助けるように見えます。

レイアウトを「折り返し/折り返し」する場所が奇妙に見えているので、XMLで設定するのではなく、なぜこれをやっているのだろうかと疑問に思っている人は、私はそれをXMLのfill_parent/fill_parentに設定しています。スクロールすると、ラップ/ラップするように見えるようにビューが縮小します。その本当に奇妙な。 foursquaredアンドロイドのソースコードを見ると、開発者が同じことを言うコメントを見つけました:

"レイアウトパラメータで何か変わっているのですが、レイアウトを塗りつぶし/塗りつぶすレイアウトがラップ/ラップレイアウトにジャンプします。 (FriendsActivity.java:258)

私の問題と同じように聞こえるので、同じコードを使ってレイアウトをしようとしていますが、彼の場合、RelativeLayoutを使用しているのに対し、LinearLayoutを使用しています。

私には何が欠けていますか?前もって感謝します。

答えて

69

レイアウトパラメータは、親のタイプでなければなりません。したがって、RelativeLayoutを作成してそれをListViewに追加する場合、レイアウトパラメータはRelativeLayout.LayoutParamsではなくListView.LayoutParams型でなければなりません。これを行う正しい方法は、この方法でinflateを呼び出すことです。

inflate(R.layout.mylayout、theListView、false);

このバージョンのinflate()は、XMLで定義されたレイアウトパラメータ(android:layout_ *)を正しく膨張させます。

+0

おかげロマン、これは質問に答えると、私はプログラム的RelativeLayoutのparamsを設定することができません。残念ながら、ビューをスクロールでラップ/ラップする(ビューをスクロールすると目立つように縮小し、次にリリース時に通常に戻る)ことを防ぐという私の問題を解決することを望んでいました。しかし、それはその問題を解決しませんでした。非常に奇妙な。 –

+0

この2番目の問題については、コードの詳細についてはお答えできません。それは確かに非常に奇妙です:) –

関連する問題