使用片段控制器在 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
我是 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