简而言之,我的问题是:我在onResume()之前调用片段的方法,我不知道为什么。
我没有使用setRetainInstance。 我有一个SearchView和ViewPager的活动。我还有一个FragmentStatePagerAdapter,可以在List中保存2个片段。
我的SearchView将活动作为OnQueryTextListener的监听器。 当我提交时,在侦听器onQueryTextSubmit内部我调用:
//make changes in shared preferences
Fragment fragment = mAdapter.getItem(viewPager.getCurrentItem());
((View) fragment).onLocationChange();
每个片段中onLocationChange的实现是:
@Override
public void onLocationChange() {
//avoid null pointer when is called too early in the life cycle
if (isResumed()) {
onResume();
}
}
问题是有时isResumed突然变错,所以我无法更新可见片段的视图。我可以看到更改只会更改当前选项卡并检测片段中的更改:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
isVisible = isVisibleToUser;
// Make sure that fragment is currently visible
if (isVisible && isResumed()) {
onResume();
}
}
你知道为什么它有时不起作用吗? 我的onResume看起来像:
@Override
public void onResume() {
super.onResume();
if (!getUserVisibleHint()) {
return;
}
//work here
}
如果您需要更多信息,请与我们联系。 提前致谢。 旧金山