2011-08-20 46 views
3

我有一個ListView自定義適配器,我需要從getView()返回LinearLayout。我這樣做的原因是我有自定義組件,它擴展了LinearLayout並需要從代碼創建。問題是,如果我從getView()返回任何LinearLayout,應用程序將崩潰。我怎樣才能使它工作?我無法膨脹視圖從XML,一切都必須通過代碼完成。返回LinearLayout的Android適配器

這裏的getView():

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    LinearLayout lay = new LinearLayout(MyApplication.getContext()); // gets the context from extended Application class 
    lay.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 
    return lay; 
} 

和日誌會發生什麼:

08-20 08:40:07.886: DEBUG/AndroidRuntime(13039): Shutting down VM 
08-20 08:40:07.896: WARN/dalvikvm(13039): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0) 
08-20 08:40:07.926: ERROR/AndroidRuntime(13039): FATAL EXCEPTION: main 
     java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams 
     at android.widget.ListView.setupChild(ListView.java:1870) 
     at android.widget.ListView.makeAndAddView(ListView.java:1839) 
     at android.widget.ListView.fillDown(ListView.java:670) 
     at android.widget.ListView.fillFromTop(ListView.java:727) 
     at android.widget.ListView.layoutChildren(ListView.java:1689) 
     at android.widget.AbsListView.onLayout(AbsListView.java:1260) 
     at android.view.View.layout(View.java:7278) 
     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 
     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 
     at android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 
     at android.view.View.layout(View.java:7278) 
     at android.widget.RelativeLayout.onLayout(RelativeLayout.java:912) 
     at android.view.View.layout(View.java:7278) 
     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 
     at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1243) 
     at android.widget.LinearLayout.onLayout(LinearLayout.java:1049) 
     at android.view.View.layout(View.java:7278) 
     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 
     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 
     at android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 
     at android.view.View.layout(View.java:7278) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
     at android.view.View.layout(View.java:7278) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
     at android.view.View.layout(View.java:7278) 
     at android.view.ViewRoot.performTraversals(ViewRoot.java:1172) 
     at android.view.ViewRoot.handleMessage(ViewRoot.java:1921) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:143) 
     at android.app.ActivityThread.main(ActivityThread.java:4196) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:507) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
     at dalvik.system.NativeStart.main(Native Method) 

感謝

//編輯:如果有人能爲我提供這將創建一個工作示例LinearLayout通過代碼並從getView()返回它,它很可能會解決這個問題

+0

發佈適配器代碼。另外logcat輸出 – Ronnie

+0

我已經在第一篇文章中附加了示例getView()函數 –

+0

是getView()在它的適配器類中嗎? –

回答

11

設置AbsListView.LayoutParams而不是LinearLayout.LayoutParams
LayoutParams是一個孩子在ViewGroup進行設置。由於你的佈局是AbsListView的孩子,你應該設置其佈局圖。

+1

謝謝,像魅力一樣工作;) –