使用片段控制器在 Android 个片段之间转换

Transitioning between Android Fragments using a Fragment controller

我是 Android 的新手,我正在尝试构建一个包含三个片段的应用程序:比方说 A、B 和 C。我想要 A 上的按钮在单击时显示 B,以及B 上的按钮在单击时向我显示 C。我知道一种方法是像这样使用 FragmentManager:在片段 A 中,我可以有一个按钮点击侦听器

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

但是,我不想让 A 知道片段 B,也不想让 B 知道片段 C。我正在考虑创建某种 FragmentController 来解决这个问题,这样控制器就会知道必要的转换并保持状态机。

这是 Android 中的常见模式吗?我尝试使用谷歌搜索,但没有看到很多此模式的代码示例。我怎样才能解耦不同的片段,这样片段就不必担心转换?

谢谢。

是的,这是一个常见的模式,你需要了解如何在片段之间进行通信。

继续,你的片段包含在一个activity中,也许你可以做下一个:

片段监听器

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

实现回调的Activity

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 :
           ...
   }
}

每个片段 必须确保父级 activity 实现了监听器

   @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);
                }
            });

写fragmentInteraction接口,在这个接口定义方法,然后fragment lifeCycle的onAttach就是这样

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

这样,此片段附加到的每个 activity 都必须实现 OnFragmentInteractionListener。现在在你的 onClick 方法中执行 mListener.onClick(view) 假设你在你的界面中定义了一个名为 onClick(View v) 的方法。在您的 activity 的 onClick 函数实现中执行 fragmentTransaction