有没有一种方法可以让我们在Android Fragment中实现onBackPressed()
,类似于我们在Android Activity中实现的方式?
因为Fragment的生命周期中没有onBackPressed()
。在Android 3.0的片段中,是否有其他的方法来超越onBackPressed()
?
根据@HaMMeRed的回答,这里是伪代码,它应该如何工作。 假设你的主活动被称为 "BaseActivity",它有一些子片段(如SlidingMenu库的例子)。 下面是一些步骤。
首先,我们需要创建接口和实现其接口的类,以拥有通用方法
1.创建 "OnBackPressedListener "类接口。
公共接口OnBackPressedListener {
public void doBack();
}
2.创建实现 "OnBackPressedListener "技能的类。
public class BaseBackPressedListener implements OnBackPressedListener {
private final FragmentActivity activity;
public BaseBackPressedListener(FragmentActivity activity) {
this.activity = activity;
}
@Override
public void doBack() {
activity.getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE) 。
}
}
3.从现在开始,我们将在我们的代码BaseActivity
和它的片段上工作。
4.在你的 "BaseActivity "类上面创建私人监听器
保护OnBackPressedListener onBackPressedListener。
5.在 "BaseActivity "中创建方法来设置监听器
public void setOnBackPressedListener(OnBackPressedListener onBackPressedListener) {
this.onBackPressedListener = onBackPressedListener。
}
在覆盖的onBackPressed
中实现类似的东西
@Override
public void onBackPressed() {
如果(onBackPressedListener != null)
onBackPressedListener.doBack()。
否则
super.onBackPressed()。
7.在你的片段中的onCreateView
,你应该添加我们的监听器
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
activity = getActivity();
((BaseActivity)activity).setOnBackPressedListener(new BaseBackPressedListener(activity))。
视图视图 = ... ;
//带视图的东西
返回视图。
}
瞧,现在当你在片段中点击返回时,你应该捕捉到你的自定义返回方法。
如果你想要这种功能,你需要在你的活动中覆盖它,然后给你的所有片段添加一个YourBackPressed
接口,每当后退按钮被按下时,你就在相关片段上调用它。
编辑:我想补充一下我之前的回答。
如果我今天要做这件事,我会使用广播,或者可能使用有序的广播,如果我希望其他面板与主/主内容面板同步更新。
支持库中的LocalBroadcastManager
可以帮助解决这个问题,你只需在onBackPressed
中发送广播,并在你关心的片段中订阅。我认为Messaging是一个更加解耦的实现,并且会有更好的扩展,所以它是我现在的官方实现建议。只需使用Intent
的动作作为消息的过滤器。发送你新创建的ACTION_BACK_PRESSED
,从你的活动中发送,并在相关的片段中监听它。