當屏幕方向更改時,我收到了有關dialogfragment的令人沮喪的問題。當我在處理程序中使用它時,成員對象(一個TextView)變爲null,但在屏幕旋轉後它被充氣並分配在onCreateView中。屏幕旋轉後DialogFragment成員變爲空
基本上我在對話框中有一個按鈕讓用戶從另一個活動中選擇文件。 之後,所選文件路徑將打印在textview上。
所以我必須:
mHandler = new Handler();
public View onCreateView(...) {
View rootView = ....
mPathView = (TextView)rootView.findViewById(...);
Log.d("test", String.format("%s", mPathView.toString());
...
}
而且我有一個方法,這就是所謂的onActivityResult附加的活動:
public void onFileSelected(...) {
if(reqeustCode==Activity.RESULT_OK) {
...
mHandler.post(new Runnable() {
public void run() {
Log.d("test", String.format("mPathView==null:%b", mPathView==null));
if(mPathView!=null) {
mPathView.setText(path);
}
}
}
return;
}
//Error handling here
}
如果我檢查logcat的,我可以看到:
09-20 16:13:51.264: test [email protected]
09-20 16:13:52.412: test [email protected] (after rotation)
09-20 16:13:56.129: test mPathView==null: true (after file selected)
我已經嘗試過onCreate中的retainInstance,但它並沒有解決這個問題。 cing新問題:在onCreateView中,savedInstanceState總是爲空。
我也知道實例是在屏幕旋轉後重新創建的。但我不明白的是,重新創建後,mPathView被分配(作爲logcat日誌指示)。
我懷疑它與活動重新創建有某種關係,因爲我有一個在Activity的onCreate中創建的對話框實例...所以在onActivityResult中,對話框的引用不再是顯示的對象。但在這個時候,我還沒有證實它,並沒有保持對話的實例的好主意。
我已經閱讀了一些在StackOverflow的帖子,但仍然無法得到它的工作...任何幫助,非常感謝!