我有一个Activity,其布局是一个片段,可以由不同的Fragments类填充。问题是,当我在Fragment X中并按回时,我想重写onBackPressed方法,以便执行一个询问用户是否保存输入数据的方法。但是,问题是onBackPressed只能从活动中覆盖,那么我的问题是:
我应该在Fragment X中创建一个公共方法并从覆盖的onBackPressed方法中调用它,还是应该使用接口或其他方法?
我已经检查了其他相关文章,例如如何不使用addToBackStack丢失数据而移回上一个片段,但是我认为这是一个不同的问题。
答案 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包含注释中的代码