2012-01-29 35 views
0

我正在使用one of the examples作爲v4兼容性應用程序。我注意到,在這一部分:FragmentRetainInstanceSupport.java中的UI更改

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

如果我添加一個TextView.setText()

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) 

爲什麼出現這種情況:

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

它具有以下例外放棄?或者更好的是,如何修改文檔示例以使用TextView而不是ProgressView

+0

沒有什麼特別的文字視圖(因此沒有完整的代碼)。它是與進度視圖一起聲明和實例化的... – davidcesarino 2012-01-29 22:11:31

回答

0

可能是不同的UI線程調用retain的Fragment的情況。可以用getActivity().runOnUIThread(some code)來解決。只是我的建議。

+0

好的,我看到我可以在UI線程上運行代碼......但這就是爲什麼我使用了兩個問題...爲什麼我無法將該示例適用於文本視圖,而不訴諸於此方法...我的意思是,ProgressBar有什麼不同於TextView,我可以更新ProgressBar UI元素,但我不能用TextView做同樣的事情? – davidcesarino 2012-01-29 22:25:38

+0

嗯。片段進入暫停狀態時可能進度條不排除。這可能會導致這樣的錯誤。當活動或片段進入暫停狀態時,您必須關閉對話框,並且片段恢復時需要恢復到對話框。 – lulumeya 2012-01-29 22:29:07