Android 快速滚动时notifyDataSetChanged()崩溃
情况: 我每次调用Android 快速滚动时notifyDataSetChanged()崩溃,android,listview,notifydatasetchanged,Android,Listview,Notifydatasetchanged,情况: 我每次调用notifyDataSetChanged4~10秒,更新ListView上的数据 当我慢慢滚动它时,它工作得很好。然而,当我滚动它稍微快一点时,应用程序崩溃了 E/InputEventReceiver: Exception dispatching input event. E/AndroidRuntime: FATAL EXCEPTION: main Process: com.timeleap.timtor.DophWifi, PID: 22014 java.lang.Inde
notifyDataSetChanged
4~10秒,更新ListView
上的数据
当我慢慢滚动它时,它工作得很好。然而,当我滚动它稍微快一点时,应用程序崩溃了
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)
我的想法:
当滚动listview时,应用程序将调用getview以查看listview中大约可见的项。当您滚动时调用notifydatasetchange
,它将出错并崩溃
临时解决方案:
我试着用Bass来解释这似乎是某个适配器中的一个“bug”。只需在按位置获取数据之前添加此代码即可
@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似乎从未崩溃,因为
(甚至我也疯狂地滚动listview:P)
问题:
有没有其他更好的方法来避免崩溃?这似乎是一个奇怪但常见的问题…如何更新数据。您是同时删除所有项还是仅添加项?请遵循我猜这与适配器获取用于填充视图的数据的方式有关。我在后台使用
data.clear()
和data.add()
,并在onPostExecute
方法中调用notifyDataSetChanged()
。噢。。。在提出问题之前,我没有找到那个帖子。确实可以帮助解决空数据的问题,但是如果数据超出了界限,我建议使用上面的代码来绕过它。如何更新数据。您是同时删除所有项还是仅添加项?请遵循我猜这与适配器获取用于填充视图的数据的方式有关。我在后台使用data.clear()
和data.add()
,并在onPostExecute
方法中调用notifyDataSetChanged()
。噢。。。在提出问题之前,我没有找到那个帖子。确实可以帮助解决空数据的问题,但如果数据超出了界限,我建议使用上面的代码来绕过它。