2011-08-20 47 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

谢谢,像魅力一样工作;) –