当点击UI元素(例如按钮)时,将片段添加到布局中是很常见的。如果用户非常快速地多次点击按钮,则可能会多次添加片段,从而导致各种问题。
如何防止这种情况?
答案 0 :(得分:13)
我创建了一个帮助方法,确保只有在片段尚不存在的情况下才添加片段:
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();
}
}
从活动或其他片段中简单调用:
addFragmentOnlyOnce(getFragmentManager(), myFragment, "myTag");
这适用于android.app。*和android.support.app。*包。
答案 1 :(得分: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");
}