gpt4 book ai didi

android - FragmentManager.findFragmentByTag() 返回 null

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

FragmentManager.findFragmentByTag("tag") 返回 null 时,我发现了一种特殊情况。

我有一种直觉,这与时间有关?

我有一个包含以下回调的网络库:

onStart()
{
Utils.ShowLoadingDialog("loading");
}

onFinnish()
{
Utils.DismissLoadingDialog("loading");
}

然后在我的 Utils 类中有以下代码:

public void showLoadingDialog(String title, String message, String tag) {
DialogFragment loadingDialogFragment = new LoadingDialogFragment();
Bundle args = new Bundle();
args.putString(CommonBundleAttributes.CONNECTING_ACTIVITY_DIALOG_TITLE, title);
args.putString(CommonBundleAttributes.CONNECTING_ACTIVITY_DIALOG_MESSAGE, message);
loadingDialogFragment.setArguments(args);
FragmentTransaction transaction = fragManager.beginTransaction();
loadingDialogFragment.show(transaction, tag);
}

public void dismissLoadingDialog(String tag) {
DialogFragment dg = (DialogFragment) fragManager.findFragmentByTag(tag);
if (dg != null) {
// this reference isn't null so the dialog is available
dg.dismissAllowingStateLoss();
}
}

现在这通常可以正常工作。但是,在网络层检测到没有互联网的情况下。它将抛出错误,然后立即调用 onFinnish()。在这种情况下,Utils.DismissDialog(tag) 没有找到该 fragment ,因此不会关闭它?

最佳答案

您可以使用 executePendingTransactions()等待 fragment 交易通过。

public void dismissLoadingDialog(String tag) {
fragManager.executePendingTransactions();
DialogFragment dg = (DialogFragment) fragManager.findFragmentByTag(tag);
if (dg != null) {
// this reference isn't null so the dialog is available
dg.dismissAllowingStateLoss();
}
}

关于android - FragmentManager.findFragmentByTag() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49648093/

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