安卓:ClassCastException异常添加到HeaderView列表视图 [英] Android: ClassCastException Adding HeaderView to Listview

查看:267
本文介绍了安卓:ClassCastException异常添加到HeaderView列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我收到 ClassCastException异常当我尝试 HeaderView 添加到的ListView 这里是 HeaderView

 查看headerView = View.inflate(这一点,R.layout.header,NULL);
 listview.addHeaderView(headerView);
 listview.setAdapter(适配器);

和这里是堆栈跟踪

  12月4日至25日:38:42.324:E / AndroidRuntime(18494):java.lang.ClassCastException:android.widget.RelativeLayout $的LayoutParams不能转换为android.widget.AbsListView $的LayoutParams
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.ListView.setupChild(ListView.java:1826)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.ListView.makeAndAddView(ListView.java:1793)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.ListView.fillDown(ListView.java:691)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.ListView.fillFromTop(ListView.java:752)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.ListView.layoutChildren(ListView.java:1630)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.AbsListView.onLayout(AbsListView.java:2091)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.View.layout(View.java:14817)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.ViewGroup.layout(ViewGroup.java:4631)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.View.layout(View.java:14817)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.ViewGroup.layout(ViewGroup.java:4631)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.FrameLayout.onLayout(FrameLayout.java:388)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.ScrollView.onLayout(ScrollView.java:1468)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.View.layout(View.java:14817)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.ViewGroup.layout(ViewGroup.java:4631)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.View.layout(View.java:14817)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.ViewGroup.layout(ViewGroup.java:4631)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.FrameLayout.onLayout(FrameLayout.java:388)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.View.layout(View.java:14817)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.ViewGroup.layout(ViewGroup.java:4631)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.View.layout(View.java:14817)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.ViewGroup.layout(ViewGroup.java:4631)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.widget.FrameLayout.onLayout(FrameLayout.java:388)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.View.layout(View.java:14817)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.ViewGroup.layout(ViewGroup.java:4631)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1987)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1744)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:5670)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:761)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.Choreographer.doCallbacks(Choreographer.java:574)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.Choreographer.doFrame(Choreographer.java:544)
12月4日至25日:38:42.324:E / AndroidRuntime(18494):在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:747)

编辑:

这是我的布局

 < RelativeLayout的
            机器人:ID =@ + ID / RE3
            机器人:layout_width =match_parent
            机器人:layout_height =WRAP_CONTENT
            机器人:背景=@机器人:彩色/透明>
        < ListView控件
            机器人:ID =@ + ID /列表
            机器人:layout_width =match_parent
            机器人:layout_height =match_parent
            机器人:背景=@色/白
            机器人:cacheColorHint =#000000
             >
        < /&的ListView GT;
< / RelativeLayout的>

这就是我的活动code

 保护无效的onCreate(捆绑savedInstanceState){
    // TODO自动生成方法存根
    super.onCreate(savedInstanceState);    的setContentView(R.layout.lay);    ListView控件列表视图=(ListView控件)findViewById(R.id.list);
    适配器=新LazyAdapter(这一点,L,list_cons);    查看headerView = View.inflate(这一点,R.layout.header,NULL);    listview.addHeaderView(headerView);
    listview.setAdapter(适配器);
}


解决方案

更新:作为@Zielony指出的那样,previous的解决方案将你的头连接到您的列表作为一个孩子,你不希望出现这种情况。这里是你可以做什么膨胀的正确布局_ * 不附加头属性:

 查看标题= LayoutInflater.from(的getContext())
                        .inflate(R.layout.list_header,ListView控件,FALSE);
listView.addHeaderView(头);


尝试指定父为你打气的看法。替换此:

 查看headerView = View.inflate(这一点,R.layout.header,NULL);

通过这样:

 查看headerView = View.inflate(这一点,R.layout.header,列表视图);

这应该设置的LayoutParams到正确的类型,而不是引起 ClassCastException异常了。

I am getting ClassCastException when i try to add HeaderView to ListView here is the code of HeaderView

 View headerView = View.inflate(this, R.layout.header, null);
 listview.addHeaderView(headerView);
 listview.setAdapter(adapter); 

and here is the stackTrace

04-25 12:38:42.324: E/AndroidRuntime(18494): java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.ListView.setupChild(ListView.java:1826)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.ListView.makeAndAddView(ListView.java:1793)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.ListView.fillDown(ListView.java:691)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.ListView.fillFromTop(ListView.java:752)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.ListView.layoutChildren(ListView.java:1630)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.AbsListView.onLayout(AbsListView.java:2091)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.View.layout(View.java:14817)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.View.layout(View.java:14817)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.ScrollView.onLayout(ScrollView.java:1468)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.View.layout(View.java:14817)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.View.layout(View.java:14817)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.View.layout(View.java:14817)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.View.layout(View.java:14817)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.View.layout(View.java:14817)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1987)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1744)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.Choreographer.doCallbacks(Choreographer.java:574)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.Choreographer.doFrame(Choreographer.java:544)
04-25 12:38:42.324: E/AndroidRuntime(18494):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)

EDIT:

This is my Layout

<RelativeLayout
            android:id="@+id/re3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent" >


        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/white"
            android:cacheColorHint="#000000"
             >
        </ListView>
</RelativeLayout>

and this is my Activity code

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    setContentView(R.layout.lay);

    ListView listview=(ListView) findViewById(R.id.list);
    adapter = new LazyAdapter(this,l, list_cons);

    View headerView = View.inflate(this, R.layout.header, null);

    listview.addHeaderView(headerView);
    listview.setAdapter(adapter);
}

解决方案

UPDATE: as @Zielony pointed out, the previous solution would attach your header to your list as a child, and you don't want that. Here is what you can do to inflate properly your layout_* attributes without attaching the header:

View header = LayoutInflater.from(getContext())
                        .inflate(R.layout.list_header, listView, false);
listView.addHeaderView(header);


Try to specify the parent for the view you inflate. Replace this:

View headerView = View.inflate(this, R.layout.header, null);

By this:

View headerView = View.inflate(this, R.layout.header, listview);

This should set the LayoutParams to the right type, not causing the ClassCastException anymore.

这篇关于安卓:ClassCastException异常添加到HeaderView列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆