我有一個DialogFragment
類與自定義XML佈局。 在onCreateView()我得到一個按鈕的引用。你點擊它來選擇文件。 當它被點擊兩件事情: 1)它使用了一個佈局吹氣添加另一個XML佈局到當前 2)初始化三個變量,它們的值ListView
,ListArray
,SimpleAdapter
,而這些都是在頂部聲明的成員變量的類。 3)然後它調用getActivity().startActivityForResult()
值onActivityResult後設置爲空
問題:當我回到這個活動的dialogfragment時,上述三個變量設置爲null。
這裏是發生了什麼事的詳細的版本:
//before calling startActivityForResult()
I/NULLTEST SIMPLEADAPTER﹕ [email protected]
I/NULLTEST ATTACHMENTSLISTVIEW﹕ android.widget.ListView{64d1c2e0 VFED.VC. ......I. 0,0-0,0 #7f090014 app:id/attachmentsListView}
I/NULLTEST ATTACHMENTSLISTARRAY﹕ [{a_date_added=Added: Nov 1, a_name=My test file 0}, {a_date_added=Added: Nov 2, a_name=My test file 1}, {a_date_added=Added: Nov 3, a_name=My test file 2}]
// Inside onActivityResult()
I/NULLTEST SIMPLEADAPTER ONRESULT﹕ null
I/NULLTEST ATTACHMENTSLISTVIEW ONRESULT﹕ null
I/NULLTEST ATTACHMENTSLISTARRAY ONRESULT﹕ []
這整個代碼被稱爲DialogFragment
內。正如您在致電startActivityForResult()
之前所看到的,將三個變量SimpleAdapter
,ListView
和ArrayList
設置爲某個值。它們都是成員變量,因此可以在這個類的任何地方調用。 方法DialogFragment
我得到對話框的按鈕部分的參考,並將setOnClickListener()
附加到按鈕。單擊此按鈕時,上述三個變量將初始化爲其值,並使用Log.i
來記錄這些值。按鈕onClick()
也會調用getActivity().startActivityForResult();
來允許我選擇一個文件,從而打開一個完全不同的Activity
。我選擇的文件和onActivityResult()
方法的主機Activity
被稱爲這對我的情況是MainActivity.java
。從這裏將數據傳遞到DialogFragment
這樣:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
現在我有DialogFragment
內,但在獲得的數據DialogFragment
不是Activity
的onActivityResult
,上述都設置爲null三個變量,但它們只在按鈕點擊時被初始化,但是會調用startActivityForResult()
等等。我不明白他們爲什麼被設置爲空。我在這裏錯過了重要的東西嗎?由於這個,我不能打電話給例如simpleAdapter.notifyDataSetChanged()
。如果我在Activity
而不是DialogFragment
中更新我的列表視圖的確切方法,但我需要在DialogFragment
內部執行此操作。也歡迎從其他活動檢索數據後更新任何其他方式的ListView。我只需要一種方法來更新該列表視圖,當我選擇更多的數據。
最後更新
我想道歉,爲愚蠢的,我是做高度。在我的主機Activity
這是MainActivity.java
,當這Activity
將調用onActivityResult()
我會創建一個對話框片段的新實例,因此:new MyDialogFragment().onActivityResult()
,顯然這就是爲什麼你的傢伙方法沒有工作,因爲onCreateView
這次沒有被調用。我已將new MyDialogFragment()
更改爲先前初始化的對話框片斷,我實際上正在顯示並且現在一切正常。我將結束這個問題。
它是正確的。我在onActivityResult中收到的數據是正確的。 – someguy234 2014-11-05 06:41:23
也調用了這樣的工作'iv.setImageURI(data.getData());'和'iv'的創建方式完全相同。 'iv = ImageView' – someguy234 2014-11-05 06:42:16