【问题标题】:Lifecycle problem when use FragmentStatePagerAdapter, Fragments使用 FragmentStatePagerAdapter、Fragments 时的生命周期问题
【发布时间】:2020-04-17 15:43:00
【问题描述】:

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

【问题讨论】:

    标签: android android-fragments android-viewpager onsaveinstancestate


    【解决方案1】:

    我找到了解决方案。我使用了 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的自定义Adapter的构造函数中调用super的构造函数,那么每个情况都会调用片段的onPauseonResume被隐藏或显示。 我认为第一个选项适合我的情况。所以我使用了第一个选项并且已经完美解决了。

    【讨论】:

      猜你喜欢
      • 2012-12-29
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      • 2021-08-05
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多