Android 我能';t更新可见片段的视图
简而言之,我的问题是:我在Android 我能';t更新可见片段的视图,android,android-fragments,tabs,Android,Android Fragments,Tabs,简而言之,我的问题是:我在onResume()之前调用一个片段的方法,我不知道为什么 我没有使用setRetainInstance。我有一个带有SearchView和ViewPager的活动。我还有一个FragmentStatePagerAdapter,它将2个片段保存在列表中 MySearchView具有作为OnQueryTextListener的侦听器的活动。 当我提交时,在监听器内onquerytexsubmitI调用: //make changes in shared preferenc
onResume()
之前调用一个片段的方法,我不知道为什么
我没有使用setRetainInstance。我有一个带有SearchView和ViewPager的活动。我还有一个FragmentStatePagerAdapter
,它将2个片段保存在列表中
MySearchView
具有作为OnQueryTextListener
的侦听器的活动。
当我提交时,在监听器内onquerytexsubmit
I调用:
//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
突然为false,因此我无法更新可见片段的视图。我只能通过更改当前选项卡和检测片段中的更改来查看更改:
@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
}
到目前为止,从getSupportFragmentManager()获取片段。getFragments()似乎工作得很好。手动调用onResume()不是一个好主意。谢谢@minhazur。现在我调用一个方法,而不是onResume。