android - 使用 Fragment Controller 在 Android Fragment 之间转换

标签 android fragment state-machine

我是 Android 的新手,我正在尝试构建一个包含三个 fragment 的应用程序:比方说 A、B 和 C。我希望 A 上的按钮在单击时显示 B,B 上的按钮显示给我C 单击时。我知道一种方法是像这样使用 FragmentManager:在 fragment A 中,我可以有一个按钮点击监听器来执行

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

但是,我不希望 A 知道 fragment B,或者 B 知道 C。我正在考虑创建某种 FragmentController 来解决这个问题,这样 Controller 就会知道必要的转换并保持状态机器。

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

谢谢。

最佳答案

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

接上,你的fragments包含在一个activity中,也许你可以做下一个:

fragment 监听器

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

每个 fragment 必须确保父 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");
        }
    }

在调用监听器的每个 fragment 中的每个按钮的 OnclickListener 中。

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

关于android - 使用 Fragment Controller 在 Android Fragment 之间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32495741/

相关文章:

c# - 在 C# 或 VB.NET 中使用 'System.Activities.Statements.StateMachine' 类的示例

android - 在android中以编程方式覆盖Text-To-Speech设置中的 "Always use my settings"选项

android - 不同文字大小的主题不起作用

java - ActionBarSherlock、ViewPager、TabsAdapter嵌套Tab Fragments

java - fragment - 错误膨胀

c# - 为什么我们不能在 C# 中使用 Iterator StateMachine Attribute?

computer-science - 是否有任何程序可以绘制和测试状态机、图灵机等?

android - 如何在android的非 Activity 类中实现 "finish"之类的东西?

java - 无法使用 Glide 库加载图像

url - HtmlUnit 和片段标识