2014-02-01 2 views
0

У меня есть макет с несколькими диалогами. В большом макете, я показываю их диалоги и нет никаких проблем:Как предотвратить отображение нескольких фрагментов друг над другом

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

Прежде всего, добавить тег при замене

transaction.replace(R.id.fragment_container, fragment, "fragment_foo") 
      .commit(); // etc 

затем осуществляют контроль

if (fragmentManager.findFragmentByTag("fragment_foo") == null){ 
    // do something 
} 
0

Вы можете найти фрагмент по тегу:

if (fragmentManager.findFragmentByTag("fragment_dialog") == null) { 
//show dialog here 
} 
0

// Заменить fragmentCotainer с идентификатором вашего контейнера Фрагмент currentFragment = fragmentManager.findFragmentById (Ri d.fragmentCotainer); // Возвращаем, если класс тот же if (currentFragment.getClass(). Equals (fragment.getClass())) return;

Смежные вопросы