2011-06-08 59 views
1

我有這個簡單的代碼:Android Honeycomb:如何確定FragmentTrancaction.commit()何時完成?

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

    //... 

    NetworkWorker networkFragment = NetworkWorker.createInstance(null); 
    fragmentTransaction.add(networkFragment, NETWORK); 

    //... 

    fragmentTransaction.commit(); 

    networkFragment.startURLRequest("test"); 
} 

墜毀,當我在我的startURLRequest()程序調用getActivity()

一旦我將startURLRequest()電話轉到onStart(),它就可以正常工作。

所以我用Google搜索了一下,發現這樣的:

調用commit()並不立即執行交易。相反,只要線程能夠這樣做,它就會安排它在活動的UI線程(「主」線程)上運行。但是,如果有必要,您可以從UI線程調用executePendingTransactions()以立即執行commit()提交的事務。除非事務是其他線程中的作業的依賴關係,否則通常不需要這樣做。 [AndDev guide]

現在,我的問題是...是不是真的建議使用此executePendingTransactions()還是將舉辦一些陷阱?是否有另一種方法來確定交易是否完成?只是猜測他們可能會在活動的下一個例程中完成似乎並不令人滿意。

親切的問候, 水母

回答

4

也許你正在想這是錯誤的方式。而不是在活動的片段上調用startURLRequest爲什麼不在調用片段的onAttachonCreate等方法中調用startURLRequest,因爲在這些點上,您知道該片段已附加到活動並且getActivity()將成功。

在我看來,片段應該決定何時調用startURLRequest而不是活動。否則,您的活動將不得不測試以確保片段與片段相關聯。

+0

謝謝,我不知道「onAttach」。 :) – jellyfish 2011-06-08 12:45:45

1

人們會認爲在提交時完成事務中的所有片段已經從返回的onResume(用於添加片段)。

相關問題