快速滚动时notifyDataSetChanged()崩溃

时间:2016-08-14 12:52:34

标签: android listview notifydatasetchanged

情况:

我通过每次拨打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)

问题:

还有其他更好的方法可以避免崩溃吗?这似乎是一个奇怪但常见的问题...

0 个答案:

没有答案