Android FragmentVIewPager和屏幕重绘问题

时间:2011-09-21 13:17:45

标签: android android-fragments android-viewpager

我们在FragmentViewPager和Fragments中遇到问题。

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

基本上当从一个片段滑动到另一个片段时,它工作得很好,但是一旦我们从片段A的上下文中拉出服务中的数据并滑动到片段B然后C,依此类推,片段中的列表似乎没有加载即空白屏幕,但如果设备的屏幕关闭然后在片段中的列表中显示数据。

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

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

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

  

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

谢谢,

阿克沙伊

1 个答案:

答案 0 :(得分:0)

我们似乎已经找出了发生这种情况的原因,但是没有真正的解释,也许有人可以详细说明这一点。

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

阿克沙伊