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()
。噢。。。在提出问题之前,我没有找到那个帖子。确实可以帮助解决空数据的问题,但如果数据超出了界限,我建议使用上面的代码来绕过它。