【发布时间】:2020-04-10 02:33:36
【问题描述】:
我有一个在 Activity 中扩展 DialogFragment 的片段。我在单击按钮时显示它:
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.add(TabsFragment.newInstance(), "Fragment");
ft.addToBackStack(null);
ft.commit();
而在 Fragment 的 onDismiss 方法中,我以这种方式将其删除:
FragmentManager fragmentManager = getChildFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if (fragmentManager.getBackStackEntryCount() > 0)
fragmentManager.popBackStack();
fragmentTransaction.commit();
所以,我的问题是,当我快速单击按钮两次时,会出现两个片段。我将这些代码替换为 Activity:
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
if (fragmentManager.getBackStackEntryCount() == 0) {
ft.add(TabsFragment.newInstance(), "Fragment");
ft.addToBackStack("Tabs");
ft.commit();
}
但是这样一来,Fragment 只显示一次。当我点击按钮 getBackStackEntryCount 为 0 并显示片段。当片段解散并再次单击按钮时,getBackStackEntryCount 为 1,尽管我在 onDismiss 方法中删除了片段。是否有其他方法可以删除片段和低值 getBackStackEntryCount?
【问题讨论】:
-
我认为更好的方法是限制快速点击按钮。因为我认为核心问题不在于片段删除。
-
@OlegSkidan 我可以使用处理程序等,但我认为这种方式很脏!