2015-09-10 2 views
0

Я новичок в Android, и я пытаюсь создать приложение, содержащее три фрагмента: скажем, A, B и C. Я хочу кнопку на A, чтобы показать мне B при нажатии, и кнопку на B, чтобы показать мне C при нажатии. Я понимаю, что один из способов заключаются в использовании FragmentManager так: в фрагменте А, я могу иметь кнопку щелчок слушателя, что делаетПереход между Android Fragments с помощью контроллера фрагмента

getSupportFragmentManager().beginTransaction() .add(R.id.fragment_container, new B()) .commit();

Однако, я не хочу знать о фрагменте В, или В знаю о C. Я думал о создании своего рода FragmentController для решения этой проблемы, чтобы контроллер знал о необходимых переходах и поддерживал конечный автомат.

Это общий шаблон в Android? Я попробовал googling, но я не видел много примеров кода для этого шаблона. Как я могу отделить разные фрагменты, чтобы фрагменты не беспокоились о переходах?

Спасибо.

+3

Фрагменты привязаны к Activity, поэтому любой переход должен происходить из Activity, к которому они будут привязаны. Перезвоните с ваших фрагментов на активность и из приложения, которое требуется когда-либо фрагментировать. –

ответ

1

Да, это общий шаблон, вам нужно понять, как работать соединять между фрагментами.

Принимая на ваши фрагменты содержатся в деятельности, может быть, вы можете сделать следующее:

Обломок слушатель

public interface FragmentNavigationListener { 
    public void onNavigateTo(int fragment); 
} 

Деятельность, которая реализует функцию обратного вызова

public static final int Fragment FRAGMENT_A = 0; 
public static final int Fragment FRAGMENT_B = 1; 

@Override 
public void onNavigateTo(int fragment){ 
    switch fragment{ 
     case FRAGMENT_A : 
      ... 
     case FRAGMENT_B : 
      ... 
    } 
} 

Каждый фрагмент должен на бис, что родительскую активность реализует слушателю

@Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     try { 
      mCallback = (FragmentNavigationListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement FragmentNavigationListener"); 
     } 
    } 

В OnclickListener от каждой кнопки в каждом фрагменте вы называете слушателя.

button.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        // Perform action on click 
        mCallback.onNavigateTo(FRAGMENT_B); 
       } 
      }); 
0

Запись fragmentInteraction интерфейсы, определить методы в этом интерфейсе, то onAttach фрагмента LifeCycle сделать этот

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    try { 
     mListener = (OnFragmentInteractionListener) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() 
       + " must implement OnFragmentInteractionListener"); 
    } 
} 

Таким образом, каждый вид деятельности, к которой этот фрагмент прикрепляется к должен реализовать OnFragmentInteractionListener. Теперь в вашем методе onClick сделайте mListener.onClick(view), предположив, что у вас есть метод под названием onClick(View v), определенный в вашем интерфейсе. И в реализации вашей деятельности функции onClick do фрагментTransaction