我在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)
无法找到片段,因此不会将其解散?
答案 0 :(得分:3)
您可以使用executePendingTransactions()
等待片段事务通过。
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();
}
}
答案 1 :(得分:0)
使用TRY-CATCH甚至IF语句检查当前的互联网连接。
答案 2 :(得分:0)
这可以是提交事务的情况。 如果您已经为Dialog片段提交了事务,请检查show方法中是否存在。
transaction.commit();
直到您的片段管理器没有要添加的片段。
此外,您需要确保从相应的Activity片段管理器中找到您提交片段的片段。