gpt4 book ai didi

Android Honeycomb : How to determine when FragmentTrancaction. commit() 已经完成?

转载 作者:行者123 更新时间:2023-11-29 15:31:21 25 4
gpt4 key购买 nike

我有一段简单的代码:

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(),它就可以正常工作。

所以我用谷歌搜索了一下,发现了这个:

Calling commit() does not perform the transaction immediately. Rather, it schedules it to run on the activity's UI thread (the "main" thread) as soon as the thread is able to do so. If necessary, however, you may call executePendingTransactions() from your UI thread to immediately execute transactions submitted by commit(). Doing so is usually not necessary unless the transaction is a dependency for jobs in other threads. [AndDev guide]

现在,我的问题是......使用此 executePendingTransactions() 是否真的值得推荐,或者这是否会包含一些陷阱?还有另一种方法可以确定交易是否已完成吗?只是猜测它们可能会在 Activity 的下一个例程中完成似乎并不令人满意。

亲切的问候,水母

最佳答案

也许您正在以错误的方式思考这个问题。与其在 Activity 的 fragment 上调用 ​​startURLRequest,不如在 fragment 的 onAttachonCreate 等中调用 startURLRequest。在这些点上的方法,您知道 fragment 已附加到 Activity ,并且 getActivity() 将成功。

在我看来, fragment 应该决定何时调用 startURLRequest 而不是 Activity 。否则您的 Activity 将必须进行测试以确保 fragment 与 fragment 相关联。

关于Android Honeycomb : How to determine when FragmentTrancaction. commit() 已经完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6276991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com