我正在使用FragmentStatePagerAdapter,ViewPager。我将通过覆盖使用onSaveInstanceState在每个片段中保存一些状态,例如EditText的光标位置。但是当我选择第一个片段,然后选择第二个片段时,不调用第一个片段的onSaveInstanceState。如果我选择第一个,然后选择第三个片段,那么将调用第一个片段的onSaveInstanceState。在选择第一个片段和下一个第二个片段的情况下,即使第一个片段的onPause也不会被调用。什么原因?我怎么解决这个问题?我整天都在研究这个问题。但是我还没有找到解决方案和正确的原因。onSaveInstanceState有可以调用的情况,但是onPause呢?为什么不叫onPause?
我找到了解决方案。我使用了[[setUserVisibleHint。在片段中,我在setUserVisibleHint中编写了保存和恢复逻辑。它运作良好。显示或隐藏片段时调用此方法。我也一起使用了[[onViewStateRestored,onSaveInstanceState来销毁案件。
@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的[[onPause,onResume。我认为第一选择适合我的情况。因此,我使用了第一个选项,并已完美解决。