2016-08-05 3 views
2

Я делаю это так, какое-то время, правильно?Каков правильный способ раздувания фрагмента из другого фрагмента?

активность:

public void toSettings(){ 
    Fragment_Settings frag = new Fragment_Settings(); 
    fm.beginTransaction() 
      .replace(R.id.mainContainer, frag) 
      .addToBackStack(null) 
      .commit(); 
    } 

В некоторых слушателю в другом фрагменте:

((Activity_Main)getActivity()).toSettings(); 
+1

IMHO В этом случае нет ничего плохого в общении с хостингом. В этом случае я предпочитаю использовать интерфейсы. Если вы использовали FragmentManager во Фрагменте, это будет getChildFragmentManager - пример будет иметь фрагмент с вложенным ViewPager. Как я уже сказал, мое мнение, другие могут отличаться. Я мог бы утверждать, однако, что, видя, что это экран настроек, он имеет отношение к тому, чтобы быть в своей собственной деятельности. –

ответ

0

Вам не нужно .addToBackStack(null) Просто удалите эту часть и ваш фрагмент не будет добавлен к backstack , Я также предложил бы добавить TAG к методу замещения на случай, если вы захотите получить фрагмент позже. Что-то вроде этого .replace(R.id.mainContainer, frag, TAG).

0

Кажется правильным, но у меня есть некоторые предложения.

  1. Если вы хотите вернуться предыдущий фрагмент из Fragment_Settings использование add метода вместо replace и addToBackStack("tag of Fragment_Settings") вместо addToBackStack(null).
  2. newInstance образец более предпочтительный, чем Fragment_Settings frag = new Fragment_Settings();. Вы можете увидеть некоторые объяснения об этом. http://www.androiddesignpatterns.com/2012/05/using-newinstance-to-instantiate.html
    Creating a Fragment: constructor vs newInstance()
  3. Чтобы избежать повторения кода при навигации между фрагментами вы можете использовать класс менеджер обеспечивает организацию добавить, заменить или поп-процессы. Here is my navigation manager class.
Смежные вопросы