android - 在堆栈跟踪中没有应用程序代码的 ListView 中滚动时的 IndexOutOfBounds

标签 android listview simplecursoradapter indexoutofboundsexception


我发现了一些类似的问题,但无论指出什么问题似乎都不适用于此处。
我有一个带有 MatrixCursor 和 SimpleCursorAdapter 作为数据提供者的 ListView。只有一种列表项样式,没有页眉或页脚等。 当我在列表中快速上下滚动时,可能只有当弹跳到列表顶部时,有时我会收到 IndexOutOfBounds 异常,但堆栈跟踪中没有我的任何应用程序代码。所以我连它都抓不住。
这在 Huawei Ideos U8510/Android 2.3.3 和 Acer Iconia Tab A510/Android 4.1.2 上发生(至少经过测试)。
任何想法如何修复或规避表示赞赏。
T.i.a.

02-05 10:17:12.980: E/AndroidRuntime(1517): FATAL EXCEPTION: main
02-05 10:17:12.980: E/AndroidRuntime(1517): java.lang.ArrayIndexOutOfBoundsException
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.view.MotionEvent.getY(MotionEvent.java:903)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.widget.AbsListView.onTouchEvent(AbsListView.java:2189)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.widget.ListView.onTouchEvent(ListView.java:3486)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.view.View.dispatchTouchEvent(View.java:3885)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:903)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1693)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1125)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.app.Activity.dispatchTouchEvent(Activity.java:2096)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1677)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2257)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1881)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.os.Looper.loop(Looper.java:123)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at android.app.ActivityThread.main(ActivityThread.java:3695)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at java.lang.reflect.Method.invokeNative(Native Method)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at java.lang.reflect.Method.invoke(Method.java:507)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
02-05 10:17:12.980: E/AndroidRuntime(1517):     at dalvik.system.NativeStart.main(Native Method)

最佳答案

我已经通过重新实现 ListView.onTouchEvent() 修复了它。我想我会分享代码:

public class MyListView extends ListView 
{

    public MyListView(Context context) 
    {
        super(context);
    }

    public MyListView(Context context, AttributeSet attrs) 
    {
        super(context, attrs);
    }

    public MyListView(Context context, AttributeSet attrs, int defStyle) 
    {
        super(context, attrs, defStyle);
    }

    @Override public boolean onTouchEvent(MotionEvent ev)
    {
        try { return super.onTouchEvent(ev); }
        catch(ArrayIndexOutOfBoundsException e)
        {
            Log.w("Catched ArrayIndexOutOfBoundsException");
            return true; // handled
        }       
    }   
}

您必须在 layout.xml 文件中使用 而不是

关于android - 在堆栈跟踪中没有应用程序代码的 ListView 中滚动时的 IndexOutOfBounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14704408/

相关文章:

android - 从 Eclipse 运行后,我的应用程序没有出现在 AVD 中

c# - 只有一个 SelectedItem 的多个 ListView

java - android.content.res.Resources$NotFoundException : Resource ID #0x88a6fd

Android - SimpleCursorAdapter changeCursor 功能太慢

android - Dalvik 格式失败 : Failed to convert dex. PermGen 空间 - Android

android - gradle 文件和我的项目中的导入错误

android - 如何在项目单击事件的 ListView 附近显示弹出菜单?

android - 从 res/raw 读取文件 .txt 并将其显示到 ListView 中

android - 使用 MergeCursor 和 SimpleCursorAdapter,缺少什么?

java - 调用 dynamicRealm.beginTransaction() 后应用卡住