Изменения пользовательского интерфейса в FragmentRetainInstanceSupport.java - PullRequest
0 голосов
/ 30 января 2012

Я использую один из примеров для приложения совместимости v4. Я заметил, что в этой части:

mPosition++;
max = mProgressBar.getMax();
mProgressBar.setProgress(mPosition);

, если я добавлю TextView.setText():

mPosition++;
max = mProgressBar.getMax();
mProgressBar.setProgress(mPosition);
mStatus.setText(String.valueOf(max)); // here, just to test stuff!

сдается со следующим исключением:

01-29 18:55:08.889: W/dalvikvm(14565): threadid=11: thread exiting with uncaught exception (group=0x40a791f8)
01-29 18:55:08.889: E/AndroidRuntime(14565): FATAL EXCEPTION: Thread-1035
01-29 18:55:08.889: E/AndroidRuntime(14565): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
01-29 18:55:08.889: E/AndroidRuntime(14565):    at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:3939)
01-29 18:55:08.889: E/AndroidRuntime(14565):    at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:701)
01-29 18:55:08.889: E/AndroidRuntime(14565):    at android.view.View.requestLayout(View.java:12555)
01-29 18:55:08.889: E/AndroidRuntime(14565):    at android.view.View.requestLayout(View.java:12555)
01-29 18:55:08.889: E/AndroidRuntime(14565):    at android.view.View.requestLayout(View.java:12555)
01-29 18:55:08.889: E/AndroidRuntime(14565):    at android.view.View.requestLayout(View.java:12555)
01-29 18:55:08.889: E/AndroidRuntime(14565):    at android.view.View.requestLayout(View.java:12555)
01-29 18:55:08.889: E/AndroidRuntime(14565):    at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:268)
01-29 18:55:08.889: E/AndroidRuntime(14565):    at android.view.View.requestLayout(View.java:12555)
01-29 18:55:08.889: E/AndroidRuntime(14565):    at android.widget.TextView.checkForRelayout(TextView.java:6716)
01-29 18:55:08.889: E/AndroidRuntime(14565):    at android.widget.TextView.setText(TextView.java:3256)
01-29 18:55:08.889: E/AndroidRuntime(14565):    at android.widget.TextView.setText(TextView.java:3110)
01-29 18:55:08.889: E/AndroidRuntime(14565):    at android.widget.TextView.setText(TextView.java:3085)
01-29 18:55:08.889: E/AndroidRuntime(14565):    at com.mytest.ui.PreActivity$RetainedFragment$1.run(PreActivity.java:111)

Почему это происходит? Или еще лучше, как мне адаптировать пример документа, чтобы использовать TextView вместо ProgressView?

1 Ответ

0 голосов
/ 30 января 2012

Может быть в случае, когда другой поток пользовательского интерфейса снова вызывает Fragment в retain. Это может быть решено с помощью getActivity().runOnUIThread(some code). Просто мое предложение.

...