情况:
我通过每次拨打ListView
4~10秒来更新notifyDataSetChanged
上的数据。
慢慢滚动时效果很好。但是当我快速滚动它时,应用程序崩溃了。
E/InputEventReceiver: Exception dispatching input event.
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.timeleap.timtor.DophWifi, PID: 22014
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at com.timeleap.timtor.DophWifi.DolphinAdapter.getView(DolphinAdapter.java:99)
我的想法:
当滚动列表视图时,应用程序将调用getview以查看列表视图的即将看见的项目。在滚动时调用notifyDataSetChanged
后,它会崩溃并崩溃。
临时解决方案:
我试图通过这个方式看起来似乎是一个" bug"在某些适配器[1]中。只需在按位置获取数据之前添加此代码即可。
@Override
public View getView(int position, View convertView, ViewGroup parent){
//checking convertView is null or not
if(data.size()> position && data.size()!=0) {
holder.text1.setText(data.get(position));
//other holders...
}
}
添加此代码后,listview似乎永远不会崩溃,因为 (即使我疯狂地滚动列表视图:P)
问题:
还有其他更好的方法可以避免崩溃吗?这似乎是一个奇怪但常见的问题...