首页 > 解决方案 > 后按时从活动中管理片段代码

问题描述

我有一个活动,其布局是一个片段,可以由不同的片段类填充。问题是,当我在 Fragment X 中并按下返回时,我想重写 onBackPressed 方法以执行询问用户是否保存输入数据的方法。但是,问题是 onBackPressed 只能从活动中被覆盖,那么我的问题是:

我应该在 Fragment X 中创建一个公共方法并从覆盖的 onBackPressed 方法中调用它,还是应该使用接口或其他任何方法?

我已经检查了其他相关帖子,例如如何在不丢失 addToBackStack 数据的情况下移回上一个片段,但我认为这是一个不同的问题。

标签: androidandroid-fragmentsonbackpressed

解决方案


当我想做类似的事情时,我为片段创建了标签,并在名为 mCurrentFragment 的父活动中创建了一个片段对象。每次我加载一个片段时,我都将它分配给 mCurrentFragment。所以我会从我的活动中覆盖 onbackPressed() 然后检查片段实例:

@Override
public void onBackPressed() {
    if (mCurrentFragment instanceof FragmentA) {
        //Do something
        //e.g. mCurrentFragment.save();
    } else if (mCurrentFragment instanceof FragmentB) {
        //Do something else
    } else {
        super.onBackPressed()
    }
}

如果你想从一个片段中调用一个方法,你只需使用你创建的片段对象(在我的例子中是 mCurrentFragment)并访问它的所有公共方法(如上面 FragmentA 的示例)

§EDITED 包括来自评论的代码


推荐阅读