2011-01-08 101 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嘗試但似乎沒有幫助。

如果你想知道爲什麼我這樣做,而不是僅僅將它設置在XML中,因爲我發現佈局「跳轉」到換行/換行時出現了一些奇怪現象。我在XML中將它設置爲fill_parent/fill_parent,並將視圖「縮小」滾動到看起來是換行/換行。它真的很奇怪。看着四維的android源代碼,我發現了一個評論,開發人員說同樣的事情:

「雖然佈局參數有些奇怪,但如果我們沒有明確地設置佈局以後填充/填充充氣,佈局跳轉到包裝/包裝佈局。「這聽起來就像我的問題,因此我試圖做相同的(通過代碼設置佈局),但在他的情況下,他使用LinearLayout,而我使用RelativeLayout。

我錯過了什麼?提前致謝。

回答

69

佈局參數必須是父類型。因此,如果您正在創建RelativeLayout並將其添加到ListView,則佈局參數的類型必須是ListView.LayoutParams,而不是RelativeLayout.LayoutParams。正確的方法是這樣調用inflate:

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

此版本的inflate()將正確膨脹XML中定義的佈局參數(android:layout_ *)。

+0

感謝羅曼,這並不回答這個問題,讓我以編程方式設置RelativeLayout的PARAMS。不幸的是,我希望它能解決我阻止視圖從「跳轉」到滾動上的換行/換行的問題(它在滾動中明顯縮小,然後在發佈時恢復正常)。但它沒有解決這個問題。很奇怪。 – 2011-01-08 17:00:28