Android 解决bug:异常提示"ListView cannot be cast to android.widget.BaseAdapter "

简介: Android 解决bug:异常提示"ListView cannot be cast to android.widget.BaseAdapter "

1.问题描述

在Android Studio中运行项目,测试项目中自定义的ListView控件功能时报常:


java.lang.ClassCastException: com.baoyz.swipemenulistview.SwipeMenuListView$1 cannot be cast to android.widget.BaseAdapter



2.分析原因


个人遇到的情况总结出两种原因:


1)一帮情况下自定义的ListView设置HeaderView、FooterVeiw很容易出现此异常。


如果在listview.setAdapter(adapter)方法之后添加头或尾view,即addHeaderView或 addFooterView,那么在你listView.removeHearderView或removeFooterView时会报该异常。

解决方法:一定要在setAdapter()之前调用addHeaderView()或addFooterVeiw()。


分析:ListView增加HeaderView之后,将原来的Adapter包装成HeaderViewListAdapter,看HeaderViewListAdapter的文档说明:


ListAdapter used when a ListView has header views. This ListAdapter wraps another one and also keeps track of the header views and their associated data objects.


This is intended as a base class; you will probably not need to use this class directly in your own code.


HeaderViewListAdapter有个方法getWrappedAdapter,该方法能返回被包装的HeaderViewListAdapter的ListAdapter。到了这里就明白为什么会报ClassCastException异常了。因为ListView的getAdapter方法返回的是HeaderViewListAdapter的实例,而将其转换成BaseAdapter的子类的实例,肯定是不对的。


2)在使用设置自定义ListView时,随意添加其属性,出现事件冲突,导致ListView出现异常,其中一项错误异常就是java.lang.ClassCastException: ListView cannot be cast to android.widget.BaseAdapter


比如:在布局的listview中设置了fastScrollEnabled属性,就会导致程序崩溃,出现此异常。


3.案例:


在项目中自定的ListView没有任何问题,在使用时的布局文件中给自定义的ListView添加一个属性fastScrollEnabled,运行程序后测试相关功能报异常:java.lang.ClassCastException: com.baoyz.swipemenulistview.SwipeMenuListView$1 cannot be cast to android.widget.BaseAdapter


解决此类问题:删除该属性即可。


示例代码如图:

image.png

异常截图:

image.png

解决代码截图:


image.png

目录
相关文章
|
6月前
|
API Android开发 开发者
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
83 2
|
6月前
|
Android开发
【Bug】Android resource linking failed和error: failed linking references.
【Bug】Android resource linking failed和error: failed linking references.
|
3月前
|
Android开发
Cannot create android app from an archive...containing both DEX and Java-bytecode content
Cannot create android app from an archive...containing both DEX and Java-bytecode content
35 2
|
5月前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
62 2
|
5月前
|
开发工具 Android开发
android studio build异常
android studio build异常
40 3
|
6月前
|
XML Java Android开发
Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)
Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)
669 1
|
5月前
|
前端开发 API Android开发
25. 【Android教程】列表控件 ListView
25. 【Android教程】列表控件 ListView
156 2
|
6月前
|
Android开发
jack-server导致 Android 编译 出现异常
jack-server导致 Android 编译 出现异常
177 6
|
6月前
|
Android开发
android捕获全局异常,并对异常做出处理
android捕获全局异常,并对异常做出处理
73 4
|
6月前
|
XML Java Android开发
如何美化android程序:自定义ListView背景
如何美化android程序:自定义ListView背景
62 2