【问题标题】:Android FragmentVIewPager and screen re-draw issueAndroid FragmentVIewPager 和屏幕重绘问题
【发布时间】:2011-09-21 13:17:45
【问题描述】:

我们遇到了 FragmentViewPager 和 Fragments 的问题。

我们正在使用 CursorLoader 在片段中填充列表。视图寻呼机由 4 个页面组成。

基本上当从一个片段滑动到另一个片段时它工作得很好,但是一旦我们在片段 A 的上下文中从服务中提取数据并滑动到片段 B 然后 C 等等,片段中的列表似乎不是加载ie是一个空白屏幕,但是如果设备的屏幕被关闭然后在Fragment列表内显示数据。

在游标加载器的 onLoadFinished 方法中,我们在每次刷新时重置适配器。

我很难找到解决方案。有什么建议吗?

附加信息,我有时也会收到此堆栈跟踪。

09-21 15:20:44.489: 信息/dalvikvm(21106): Landroid/view/ViewRoot$CalledFromWrongThreadException;: 只有 创建视图层次结构的原始线程可以触及其视图。 09-21 15:20:44.497:信息/dalvikvm(21106):在 android.view.ViewRoot.checkThread(ViewRoot.java:2932) 09-21 15:20:44.497:信息/dalvikvm(21106):在 android.view.ViewRoot.requestLayout(ViewRoot.java:629) 09-21 15:20:44.501:信息/dalvikvm(21106):在 android.view.View.requestLayout(View.java:8267) 09-21 15:20:44.501: 信息/dalvikvm(21106):在 android.view.View.requestLayout(View.java:8267) 09-21 15:20:44.501: 信息/dalvikvm(21106):在 android.view.View.requestLayout(View.java:8267) 09-21 15:20:44.501: 信息/dalvikvm(21106):在 android.view.View.requestLayout(View.java:8267) 09-21 15:20:44.517: 信息/dalvikvm(21106):在 android.widget.RelativeLayout.requestLayout(RelativeLayout.java:257) 09-21 15:20:44.517:信息/dalvikvm(21106):在 android.view.View.requestLayout(View.java:8267) 09-21 15:20:44.517: 信息/dalvikvm(21106):在 android.view.View.requestLayout(View.java:8267) 09-21 15:20:44.517: 信息/dalvikvm(21106):在 android.view.View.requestLayout(View.java:8267) 09-21 15:20:44.517: 信息/dalvikvm(21106):在 android.view.View.requestLayout(View.java:8267) 09-21 15:20:44.517: 信息/dalvikvm(21106):在 android.view.View.requestLayout(View.java:8267) 09-21 15:20:44.517: 信息/dalvikvm(21106):在 android.view.View.requestLayout(View.java:8267) 09-21 15:20:44.517: 信息/dalvikvm(21106):在 android.view.View.setFlags(View.java:4641) 09-21 15:20:44.517: 信息/dalvikvm(21106):在 android.view.View.setVisibility(View.java:3116) 09-21 15:20:44.517: 信息/dalvikvm(21106):在 android.widget.AdapterView.updateEmptyStatus(AdapterView.java:713) 09-21 15:20:44.517:信息/dalvikvm(21106):在 android.widget.AdapterView.checkFocus(AdapterView.java:697) 09-21 15:20:44.517:信息/dalvikvm(21106):在 android.widget.AdapterView$AdapterDataSetObserver.onInvalidated(AdapterView.java:812) 09-21 15:20:44.525:信息/dalvikvm(21106):在 android.database.DataSetObservable.notifyInvalidated(DataSetObservable.java:43) 09-21 15:20:44.525:信息/dalvikvm(21106):在 android.widget.BaseAdapter.notifyDataSetInvalidated(BaseAdapter.java:54) 09-21 15:20:44.525:信息/dalvikvm(21106):在 android.widget.CursorAdapter$MyDataSetObserver.onInvalidated(CursorAdapter.java:391) 09-21 15:20:44.525:信息/dalvikvm(21106):在 android.database.DataSetObservable.notifyInvalidated(DataSetObservable.java:43) 09-21 15:20:44.525:信息/dalvikvm(21106):在 android.database.AbstractCursor.deactivateInternal(AbstractCursor.java:89) 09-21 15:20:44.525:信息/dalvikvm(21106):在 android.database.AbstractCursor.close(AbstractCursor.java:108) 09-21 15:20:44.525:信息/dalvikvm(21106):在 android.database.sqlite.SQLiteCursor.close(SQLiteCursor.java:504) 09-21 15:20:44.525:信息/dalvikvm(21106):在 android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:594) 09-21 15:20:44.525:信息/dalvikvm(21106):在 dalvik.system.NativeStart.run(Native Method)

谢谢,

阿克谢

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案1】:

    我们似乎已经弄清楚了发生这种情况的原因,但并没有真正的解释,也许有人可以详细说明一下。

    来自服务器的响应在片段中使用 service+ResultReceiver 来通知 UI 后台 httpservice 完成,这在活动中使用时可以正常工作,但是使用片段从处理程序到 UI 的任何钩子都会导致 UI崩溃,就好像 UI 更改是从一个单独的线程进行的一样,除了上面看到的偶尔出现的错误之外,日志中没有一致的抱怨。一旦我们在结果接收器中使用处理程序来通知 UI 更改,我们就不会再遇到这个问题了。

    阿克谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多