2011-06-08 39 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(用于添加片段)。

相关问题