在Activity离开屏幕后调用onScroll

时间:2011-01-12 19:32:33

标签: android listview

我最初使用的是ListActivity。它是用CursorAdapter管理的。

我重写了onScroll方法,根据用户在滚动ListView时可见的内容更新UI元素。我的onScroll方法访问Adapter的Cursor以检查有关第一个可见项的一些数据。

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

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

这很奇怪,因为我的overrode onScroll中的前两行确保Cursor不为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会被调用?

关于如何解决这个问题的任何想法?

0 个答案:

没有答案