按下后可通过活动管理片段代码

时间:2019-02-08 11:24:02

标签: android android-fragments onbackpressed

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

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

我已经检查了其他相关文章,例如如何不使用addToBackStack丢失数据而移回上一个片段,但是我认为这是一个不同的问题。

1 个答案:

答案 0 :(得分:1)

当我想做类似的事情时,我在名为mCurrentFragment的父活动中为片段和Fragment对象创建了标签。每次加载片段时,都会将其分配给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()
    }
}

如果要从片段中调用方法,则只需使用创建的Fragment对象(在我的情况下为mCurrentFragment),即可访问其所有公共方法(如上述FragmentA的示例)

§EDITED包含注释中的代码