使用FragmentStatePagerAdapter时的生命周期问题,Fragments



我使用的是FragmentStatePagerAdapter,ViewPager。我将使用onSaveInstanceState重写来保存一些状态,如EditText在每个片段中的光标位置。但是当我选择第一个片段,然后选择第二个片段时,不会调用第一个片段的onSaveInstanceState。如果我选择第一个片段,然后选择第三个片段,那么会调用第一个片段的onSaveInstanceState
在选择第一个片段和下一个第二个片段的情况下,甚至不会调用第一个片段的onPause原因是什么?我该如何解决这个问题?我对这个问题研究了一整天。但我还没有找到解决方案和正确的理由。onSaveInstanceState有可以调用的情况,但onPause如何?为什么不调用onPause?

我找到了一个解决方案。我使用了setUserVisibleHint。在片段中,我在setUserVisibleHint中编写了保存和恢复逻辑。它运行良好。当片段被显示或隐藏时,这被调用。此外,我还将onViewStateRestoredonSaveInstanceState一起用于销毁案例。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser) {
if (mInputFrom != null) {
if(isToFocus) {
mInputFrom.requestFocus();
mInputFrom.setSelection(fromCursor);
} else {
mInputOut.requestFocus();
mInputOut.setSelection(toCursor);
}
}
} else {
if (mInputFrom != null) {
fromCursor = mInputFrom.getSelectionStart();
toCursor = mInputOut.getSelectionStart();
}
}
}

setUservisibleHint已被弃用。因此,另一种选择是,我们可以使用FragmentStatePagerAdapter的构造函数(fm,BEHAVIOR_SET_USER_VISIBLE_HINT(;如果我们在扩展FragmentStatePagerAdapter的自定义适配器的构造函数中调用super的构造函数,那么对于每个被隐藏或显示的情况,都会调用fragment的onPauseonResume。我认为第一种选择适合我的情况。所以我使用了第一个选项,并且已经完美地解决了。

最新更新