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

问题描述 投票:0回答:1

我正在使用FragmentStatePagerAdapter,ViewPager。我将通过覆盖使用onSaveInstanceState在每个片段中保存一些状态,例如EditText的光标位置。但是当我选择第一个片段,然后选择第二个片段时,不调用第一个片段的onSaveInstanceState。如果我选择第一个,然后选择第三个片段,那么将调用第一个片段的onSaveInstanceState。在选择第一个片段和下一个第二个片段的情况下,即使第一个片段的onPause也不会被调用。什么原因?我怎么解决这个问题?我整天都在研究这个问题。但是我还没有找到解决方案和正确的原因。onSaveInstanceState有可以调用的情况,但是onPause呢?为什么不叫onPause?

android android-fragments android-viewpager onsaveinstancestate
1个回答
0
投票

我找到了解决方案。我使用了[[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。我认为第一选择适合我的情况。因此,我使用了第一个选项,并已完美解决。
© www.soinside.com 2019 - 2024. All rights reserved.