2013-12-05 4 views
0

Как я могу прикреплять существующий фрагмент, когда вы меняете вкладку в ActionBar.NAVIGATION_MODE_TABS?Как подключить существующий фрагмент

class MyTabsListener implements ActionBar.TabListener { 
    public Fragment fragment; 

    public MyTabsListener(Fragment fragment) { 
     this.fragment = fragment; 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      ft.replace(R.id.fragment_container, fragment); 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      ft.detach(fragment); 
    } 
} 

ответ

0

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

public void setFragment(Fragment fragmentInstance) { 
     FragmentTransaction fragmentTransaction = fragmentManager 
       .beginTransaction(); 
     Fragment oldFragmentInstance = fragmentManager 
       .findFragmentById(R.id.curr_fragment); 

     boolean onlyAttach = false; 
     List<Fragment> prevFragments = getSupportFragmentManager() 
       .getFragments(); 
     for (Fragment fragment : prevFragments) { 
      if (fragment == null) { 
       continue; 
      } 

      if (fragment.getClass().equals(fragmentInstance.getClass())) { 
       onlyAttach = true; 
       fragmentInstance = fragment; 
       break; 
      } 
     } 

     fragmentTransaction.detach(oldFragmentInstance); 

     if (onlyAttach) { 
      fragmentTransaction.attach(fragmentInstance); 
     } else { 
      fragmentTransaction.replace(R.id.curr_fragment, 
        fragmentInstance); 
      fragmentTransaction.addToBackStack(null); 
     } 
     try { 
      fragmentTransaction.commit(); 
     } 
} 

Надеется, что это помогает

+0

Стараюсь этот код, но получили сообщение об ошибке 'Метода getFragments() не определенно для типа FragmentManager' – Remie

+0

Вы правы, [javadoc] (http://developer.android.com/reference/android/support/v4/app/FragmentManager.html) не отражает этот метод, но в моей библиотеке поддержки v4 у меня есть этот метод o_O Это отлично работает для моего – iflorit

+0

Да, я знаю, что 'getSupportFragmentManager()' из библиотеки поддержки v4, но я тоже пытаюсь использовать его - такая же ошибка :(Не могли бы вы привести свой пример с импортом? – Remie

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