android - 后按时从活动中管理片段代码
问题描述
我有一个活动,其布局是一个片段,可以由不同的片段类填充。问题是,当我在 Fragment X 中并按下返回时,我想重写 onBackPressed 方法以执行询问用户是否保存输入数据的方法。但是,问题是 onBackPressed 只能从活动中被覆盖,那么我的问题是:
我应该在 Fragment X 中创建一个公共方法并从覆盖的 onBackPressed 方法中调用它,还是应该使用接口或其他任何方法?
我已经检查了其他相关帖子,例如如何在不丢失 addToBackStack 数据的情况下移回上一个片段,但我认为这是一个不同的问题。
解决方案
当我想做类似的事情时,我为片段创建了标签,并在名为 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 包括来自评论的代码
推荐阅读
- c# - C# SQL 数据存在时勾选复选框
- assembly - 如何从 Assembly 中的寄存器打印?
- c# - 更新配置文件数据不起作用 asp.net 网络表单
- python - 更改 Anaconda Navigator 默认文件位置
- javascript - React Native - TypeScript 中带有 ref 回调的高阶组件引发编译错误
- r - shinyApp :获取文件夹作为输入,并将文件夹内的文件用作 R 函数的输入
- r - 使用 rowMeans() 进行故障排除 - 'x' 必须是至少包含二维的数组
- apache-kafka - Kafka Stream Reducer 没有减少记录
- android - 在 kotlin 迁移后 Crashitycs 报告错误的行号
- excel - 使用 vba 将文件从不同的文件夹循环复制到另一个文件夹