Android FragmentVIewPager и проблема перерисовки экрана - PullRequest
0 голосов
/ 21 сентября 2011

У нас возникла проблема с 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): на android.view.ViewRoot.checkThread (ViewRoot.java:2932) 09-21 15: 20: 44.497: INFO / dalvikvm (21106): на android.view.ViewRoot.requestLayout (ViewRoot.java:629) 09-21 15: 20: 44.501: INFO / dalvikvm (21106): в android.view.View.requestLayout (View.java:8267) 09-21 15:20:44.501: INFO / dalvikvm (21106): на android.view.View.requestLayout (View.java:8267) 09-21 15: 20: 44.501: INFO / dalvikvm (21106): на android.view.View.requestLayout (Просмотреть.java: 8267) 09-21 15: 20: 44.501: INFO / dalvikvm (21106): на android.view.View.requestLayout (View.java:8267) 09-21 15: 20: 44.517: INFO / dalvikvm (21106): в android.widget.RelativeLayout.requestLayout (RelativeLayout.java:257) 09-21 15: 20: 44.517: INFO / dalvikvm (21106): в android.view.View.requestLayout (View.java:8267) 09-21 15: 20: 44.517: INFO / dalvikvm (21106): на android.view.View.requestLayout (View.java:8267) 09-21 15: 20: 44.517: INFO / dalvikvm (21106): на android.view.View.requestLayout (View.java:8267) 09-21 15: 20: 44.517: INFO / dalvikvm (21106): на android.view.View.requestLayout (View.java:8267) 09-21 15: 20: 44.517: INFO / dalvikvm (21106): на android.view.View.requestLayout (View.java:8267) 09-21 15: 20: 44.517: INFO / dalvikvm (21106): на android.view.View.requestLayout (View.java:8267) 09-21 15: 20: 44.517: INFO / dalvikvm (21106): на android.view.View.setFlags (View.java:4641) 09-21 15: 20: 44.517: INFO / dalvikvm (21106): на android.view.View.setVisibility (View.java:3116) 09-21 15: 20: 44.517: INFO / dalvikvm (21106): в android.widget.AdapterView.updateEmptyStatus (AdapterView.java:713) 09-21 15: 20: 44.517: INFO / dalvikvm (21106): в android.widget.AdapterView.checkFocus (AdapterView.java: 697) 09-21 15: 20: 44.517: INFO / dalvikvm (21106): на android.widget.AdapterView $ AdapterDataSetObserver.onInvalidated (AdapterView.java:812) 09-21 15: 20: 44.525: INFO / dalvikvm (21106): в android.database.DataSetObservable.notifyInvalidated (DataSetObservable.java:43) 09-21 15: 20: 44.525: INFO / dalvikvm (21106): в 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): в android.database.DataSetObservable.notifyInvalidated (DataSetObservable.java:43) 09-21 15: 20: 44.525: INFO / dalvikvm (21106): в android.database.AbstractCursor.deactivateInternal (AbstractCors)) 09-21 15: 20: 44.525: INFO / dalvikvm (21106): в android.database.AbstractCursor.close (AbstractCursor.java:108) 09-21 15: 20: 44.525: INFO / dalvikvm (21106): в android.database.sqlite.SQLiteCursor.close (SQLiteCursor.java:504) 09-21 15: 20: 44.525: INFO / dalvikvm (21106): в android.database.sqlite.SQLiteCursor.finalize (SQLiteCursor.java:594)09-21 15: 20: 44.525: INFO / dalvikvm (21106): at dalvik.system.NativeStart.run (собственный метод)

Спасибо,

Акшай

1 Ответ

0 голосов
/ 25 сентября 2011

Мы, кажется, выяснили причину, по которой это происходит, но на самом деле не имеем объяснения, может быть, кто-то мог бы уточнить это.

В ответе от сервера использовался сервис + ResultReceiver во фрагменте, чтобы уведомить пользовательский интерфейс о фоновом завершении httpservice, который отлично работает при использовании в действии, но с фрагментом любой хук в пользовательский интерфейс из обработчика привел к пользовательскому интерфейсу сбой, как если бы изменение пользовательского интерфейса было сделано из отдельного потока, без единой жалобы в журналах, кроме случайной ошибки, как показано выше. Как только мы использовали обработчик в получателе результатов для уведомления пользовательского интерфейса об изменении, мы больше не сталкиваемся с этой проблемой.

Акшай

...