【问题标题】:ClassCastException when trying to Add HeaderView to listView android尝试将 HeaderView 添加到 listView android 时出现 ClassCastException
【发布时间】:2015-03-07 21:03:05
【问题描述】:

我正在尝试将 HeaderView 添加到我的 EndlessListView

这里是代码

mainLayout is the parent of SwipeLayout in which ListView is placed
ViewGroup headerView = (ViewGroup) getLayoutInflater().inflate(R.layout.profile_header, (RelativeLayout) findViewById(R.id.mainLayout), false);
        listView.addHeaderView(headerView, null, false);
        adapter = new  TrafficTweatsAdapter(this, tweatsList);
        listView.setAdapter(adapter);

我收到了这个错误

 Caused by: java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
            at android.widget.ListView.clearRecycledState(ListView.java:513)
            at android.widget.ListView.resetList(ListView.java:499)
            at android.widget.ListView.setAdapter(ListView.java:442)
            at com.app.custom.EndlessListView.setAdapter(EndlessListView.java:45)

如果我输入 null 而不是 bgLayout 或返回 true,它会给我错误

java.lang.NullPointerException
            at android.widget.AbsListView.obtainView(AbsListView.java:2269)
            at android.widget.ListView.makeAndAddView(ListView.java:1769)

【问题讨论】:

  • 能分享一下TrafficTweatsAdapter getView方法代码

标签: java android eclipse


【解决方案1】:

您收到错误是因为您以错误的方式膨胀布局。一起来看看documentation

公共视图膨胀(int 资源,ViewGroup 根,布尔 attachToRoot)

root 可选视图,作为生成的层次结构的父级(如果 attachToRoot 为真),或者只是为返回的层次结构的根提供一组 LayoutParams 值的对象(如果 attachToRoot 为假。)

因此,您将 RelativeLayout 指定为 paretnt 并且 RelativeLayout.LayoutParams 正在从该布局中获取。之后,您尝试将该视图添加到使用 AbsListView.LayoutParams 布局参数的 ListView

您应该能够通过将 ListView 指定为父级而不是 mainLayout 来填充页脚来添加页脚

【讨论】:

  • listVIew代替(RelativeLayout) findViewById(R.id.mainLayout)
  • 我已经放置 listView inflate(R.layout.profile_header, listView, false);现在给出第二个 NullPointerError FATAL EXCEPTION: main java.lang.NullPointerException at android.widget.AbsListView.obtainView(AbsListView.java:2269) at android.widget.ListView.makeAndAddView(ListView.java:1769) at android.widget.ListView。 fillDown(ListView.java:672)
  • 这可能意味着您的适配器工作不正常。向我们展示您来自适配器的getView
  • @MuhammadUmar 在stackoverflow.com/questions/27015544/… 看到类似的Q 在getView() 中检查返回值
  • @andrew 适配器很好。它在没有 headerView 的情况下工作,唯一的区别是 ArrayList 大小为 0(非空),但它不应该有任何问题,如果我删除 headerview 它工作得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
  • 2017-05-24
相关资源
最近更新 更多