Android 活动离开屏幕后调用onScroll

Android 活动离开屏幕后调用onScroll,android,listview,Android,Listview,我最初使用的是ListActivity。它是用游标适配器管理的 我重写了onScroll方法,根据用户在ListView中滚动时可以看到的内容更新UI元素。我的onScroll方法访问适配器的光标以检查关于第一个可见项的一些数据 我决定在屏幕上放置另一个ListView,因此我将其更改为活动(而不是ListActivity),给ListView一个+id,并在活动中为其创建一个成员变量。我将对getListView()的所有引用都更改为该变量 除了一件事之外,这一切都很好:如果单击列表中的某个项

我最初使用的是ListActivity。它是用游标适配器管理的

我重写了onScroll方法,根据用户在ListView中滚动时可以看到的内容更新UI元素。我的onScroll方法访问适配器的光标以检查关于第一个可见项的一些数据

我决定在屏幕上放置另一个ListView,因此我将其更改为活动(而不是ListActivity),给ListView一个+id,并在活动中为其创建一个成员变量。我将对getListView()的所有引用都更改为该变量

除了一件事之外,这一切都很好:如果单击列表中的某个项目,它将启动一个新活动。在屏幕上显示此新活动后,将调用上一个活动的onScroll方法。它使应用程序崩溃

这很奇怪,因为overrode onScroll中的前两行确保光标不为null,它处于打开状态,计数大于0,并移动到可见位置。这两行很好用。但是,当我试图从中提取数据时,应用程序崩溃,出现以下错误:

01-12 13:22:47.752: ERROR/AndroidRuntime(526): Uncaught handler: thread main exiting due to uncaught exception
01-12 13:22:47.922: ERROR/AndroidRuntime(526): android.database.StaleDataException: Access closed cursor
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:217)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.database.CursorWrapper.getString(CursorWrapper.java:135)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at com.myapp.app.activity.ActivityPrepare$4.onScroll(ActivityPrepare.java:160)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.widget.AbsListView.invokeOnItemScrollListener(AbsListView.java:656)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.widget.ListView.layoutChildren(ListView.java:1429)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.widget.AbsListView.onLayout(AbsListView.java:1113)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.view.View.layout(View.java:6830)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.view.View.layout(View.java:6830)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.view.View.layout(View.java:6830)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.view.View.layout(View.java:6830)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.view.ViewRoot.performTraversals(ViewRoot.java:996)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.os.Looper.loop(Looper.java:123)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at android.app.ActivityThread.main(ActivityThread.java:4363)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at java.lang.reflect.Method.invokeNative(Native Method)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at java.lang.reflect.Method.invoke(Method.java:521)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-12 13:22:47.922: ERROR/AndroidRuntime(526):     at dalvik.system.NativeStart.main(Native Method)
我假设存在某种竞赛条件,但为什么在屏幕上都没有活动的情况下会调用onScroll


有什么办法可以解决这个问题吗?

听起来很奇怪。。您是否查看了活动生命周期?这是在onPause之后调用的吗?是的。它在onPause和onstop之后被调用根据谷歌的文档,停止管理光标的活动(即:你称之为startManagingCursor(Cursor))将停用光标。如果Cursor对象有一个isActivated()方法,我可能可以绕过它,但它们似乎没有。我通过确保onScroll方法的visibleItemCount参数>0来绕过此崩溃,但我仍然不喜欢在onPause()和onStop()之后调用onScroll