每当向用户显示片段时,我都需要执行一些代码。
通过API查看我能看到的最接近的钩子方法是onResume。但是,从调试到我的代码,当用户选择后退按钮返回到先前显示的片段时,似乎onResume被不调用。
只是为了澄清我所看到的行为:
我有一个'父'活动,用于配置ActionBar中的标签...以及2个片段F1和F2。
用户选择一个标签,F1将加载到活动中。按下按钮,用户可以导航到F2。这不是一个单独的标签... F2被换成布局。
添加日志语句,我可以看到当用户选择F2上的后退按钮时,会发生以下情况....
1)在F2上调用onPause()。 2)F1加载到活动中...但是F1上的onResume()未被调用
此时日志中没有错误。
我在这里做错了什么想法?
提前致谢,
尼尔。
答案 0 :(得分:10)
好吧,看来这个是飞行员错误。我在活动中片段之间切换的原始代码是....
public void switchFragment(Fragment newFragment, String tag) {
getSupportFragmentManager()
.beginTransaction()
.add(android.R.id.content, newFragment)
.addToBackStack(tag)
.commit();
}
上面代码中对add()的调用实际上应该是replace()。似乎没有用后退按钮行为替换活动混乱中的片段。
必须诚实并承认我并不完全确定为什么会发生这种情况。但是,在进行更改后,一旦调用了后退按钮,就会在目标片段上调用onResume()方法。
答案 1 :(得分:0)
这个有点奇怪的问题,因为当发生这种特定方法被调用的事件并且满足所有条件时,保证调用任何现有的类方法。选择任何适合您想要达到的最佳任务。请参阅文档here