如何防止多个片段相互显示

时间:2014-02-01 07:48:10

标签: android android-fragments android-support-library

我有一个多对话框片段布局。在大型布局中,我将它们显示为对话框并且没有问题:

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();

问题在于,在普通设备中,当我按两次(或更多)菜单按钮时,相同的片段将显示在前一个上。有没有办法找出现在可见的片段并阻止它再次打开?

3 个答案:

答案 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;