我有一个多对话框片段布局。在大型布局中,我将它们显示为对话框并且没有问题:
fragment.show(fragmentManager, "fragment_dialog");
但在普通设备中,我正在使用片段事务并替换片段如下:
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.replace(R.id.fragment_container, fragment).addToBackStack(null).commit();
问题在于,在普通设备中,当我按两次(或更多)菜单按钮时,相同的片段将显示在前一个上。有没有办法找出现在可见的片段并阻止它再次打开?
答案 0 :(得分:3)
首先,在替换
时添加标签transaction.replace(R.id.fragment_container, fragment, "fragment_foo")
.commit(); // etc
然后制作一个控件
if (fragmentManager.findFragmentByTag("fragment_foo") == null){
// do something
}
答案 1 :(得分:0)
您可以按标签找到片段:
if (fragmentManager.findFragmentByTag("fragment_dialog") == null) {
//show dialog here
}
答案 2 :(得分:0)
//将fragmentCotainer替换为您的容器ID Fragment currentFragment = fragmentManager.findFragmentById(R.id.fragmentCotainer); //如果班级相同则返回 if(currentFragment.getClass()。equals(fragment.getClass()))return;