9

当点击按钮等 UI 元素时,通常会将 Fragment 添加到布局中。如果用户非常快速地多次点击按钮,则可能会多次添加 Fragment,从而导致各种问题。

如何防止这种情况?

4

2 回答 2

16

我创建了一个辅助方法,确保仅在片段尚不存在时才添加片段:

public static void addFragmentOnlyOnce(FragmentManager fragmentManager, Fragment fragment, String tag) {
    // Make sure the current transaction finishes first
    fragmentManager.executePendingTransactions();

    // If there is no fragment yet with this tag...
    if (fragmentManager.findFragmentByTag(tag) == null) {
        // Add it
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.add(fragment, tag);
        transaction.commit();
    }
}

来自 Activity 或另一个 Fragment 的简单调用:

addFragmentOnlyOnce(getFragmentManager(), myFragment, "myTag");

这适用于 android.app.* 和 android.support.app.* 包。

于 2012-12-26T07:37:12.023 回答
0

这是我的解决方案,我尝试通过点击按钮多次快速单击显示对话框片段。

            FragmentManager fm = getSupportFragmentManager();
            Fragment oldFragment = fm.findFragmentByTag("wait_modal");

            if(oldFragment != null && oldFragment.isAdded())
                return;

            if(oldFragment == null && !please_wait_modal.isAdded() && !please_wait_modal.isVisible()){
                fm.executePendingTransactions();
                please_wait_modal.show(fm,"wait_modal");
            }
于 2021-01-04T08:51:21.937 回答