【发布时间】:2017-03-22 11:06:48
【问题描述】:
在我的应用程序中有一个Activity 和三个fragments 说A、B、C。我将它们加在一起。
我没有在backstack 中加载片段A,但是在单击列表视图项时,我将另外两个加载到后台堆栈中。现在我的问题和有趣的部分是,虽然onBackPressed() 没有任何片段的回调方法(onResume(),onStart())被调用,但是如果我锁定手机并恢复我的活动,并且我在片段 C 上,所有片段的 onResume以前的片段 A 和 B 被调用。在onResume() 我调用了一个 api,所有检查都失败了
if(getFragmentManager()!=null && activity!=null) {
DashboardFragment currentFragment = (DashboardFragment) getFragmentManager().findFragmentById(R.id.container);
if(currentFragment.isVisible() && isAdded() && isVisible() && getUserVisibleHint()) {
//callApi;
}
}
没有像 isvisible() 这样的方法返回正确的值和像
这样的方法@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
}
没有被调用。那么如何确保仅在片段可见时才调用 api。
【问题讨论】:
-
在将这些片段添加到 Activity 的视图中时,您使用的是
add还是replace? -
@mwieczorek 我正在使用添加
-
添加或替换没有任何区别
-
你的片段 c onResume() 是否被调用?
-
@jiteshmohite 是的,是的,但我想确保当我在 c 时不会调用 A 的 onResume
标签: android android-fragments onresume