首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DialogFragment - show()方法

DialogFragment - show()方法
EN

Stack Overflow用户
提问于 2019-09-03 05:11:34
回答 1查看 101关注 0票数 0

我想在按下按钮后看到DialogFragment,我有两个代码片段:

首先:

代码语言:javascript
运行
复制
        if (view.equals(b1)) {

            Fragment2 fr2 = new Fragment2();
            fr2.show(manager, "addCity"); 

        }

我不明白为什么这个标记会出现在show ()方法中,因为它对程序更改没有任何影响。

第二:

代码语言:javascript
运行
复制
Fragment fr = manager.findFragmentByTag("addCity"); 

        if (view.equals(b1)) { 

            if (fr != null) { 

                manager.beginTransaction().remove(fr).commit();
            }

            Fragment2 fr2 = new Fragment2(); 
            fr2.show(manager, "addCity"); 

        }

在第二个例子中,我不明白这行代码是做什么用的:

代码语言:javascript
运行
复制
Fragment fr = manager.findFragmentByTag("addCity");

因为参考变量fr将总是空的,因为在这种标签的名称下当前没有片段。

另外,为什么会出现这种情况,因为之前的更改fr总是为空,所以这个if永远不会实现。

代码语言:javascript
运行
复制
if (fr != null) { 

                manager.beginTransaction().remove(fr).commit();
            }
EN

回答 1

Stack Overflow用户

发布于 2019-09-03 08:52:43

当您使用show(manager, "addCity")时,第二个参数是片段的标记。通过使用带有相同标记的findFragmentByTag(),可以查看DialogFragment是否已经存在,如果存在(fr != null),则删除它。

这是防御性很强的代码,可能是为了避免用户非常非常快地双击按钮。但是,因为它没有使用showNow() (而不是show()),所以它在这方面做得并不好,因为show()是异步的。

通常,您根本不需要这些代码-只需使用您想要的任何标记调用show(),而无需任何仪式(只有当您稍后尝试使用findFragmentByTag()在事后检索DialogFragment时,此标记才有意义)。

但是,如果您确实希望保持防御性,并避免用户打开两个对话框这一极其罕见的机会,那么您需要

1)使用showNow()而不是show(),这样FragmentManager就会立即更新,确保findFragmentByTag()在这种情况下确实会返回片段2)不要删除然后再次调用show(),只要不调用已经显示的show() -您只是在做额外的工作。

这意味着您的代码将如下所示

代码语言:javascript
运行
复制
if (view.equals(b1)) {
    Fragment existingDialog = manager.findFragmentByTag("addCity");
    // Only add a new dialog if it isn't already present.
    if (existingDialog == null) {
        Fragment2 fr2 = new Fragment2(); 
        fr2.showAll(manager, "addCity"); 
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57762714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档