将 Fragments 中的 SharedPreference 设置为选项卡

Setting SharedPreference within Fragments as Tabs

我在使用 SharedPreferences 时遇到了问题!

目标:我有一个 ActionBar/Tab 应用程序,其中有一个 MainActivity 和 4 个选项卡作为滑动片段。我希望应用程序记住上次用户选择的选项卡,以便在下次启动应用程序时,它默认为该选项卡。

每个片段中的代码(在onCreateView方法中):

SharedPreferences prefs = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit().putInt("tabPref", 0);
editor.apply();

其中 "tabPref", 0 是首选项的名称和选项卡 (0-3) 的编号。

在 MainActivity 中,我使用以下内容来读取首选项并设置启动应用程序时的默认选项卡(在 onCreate 中):

SharedPreferences prefs = getPreferences(Context.MODE_PRIVATE);
Integer tabPref = prefs.getInt("tabPref", 99);
mViewPager.setCurrentItem(tabPref, false);

但是,我设置了一些非常奇怪的首选项,它们不符合选项卡的选择(例如选项卡 4 甚至没有设置首选项,选项卡 1-3 随机设置整数 0 、1、2 或 3 - 我正在使用 System.Outs 来查看发生了什么)。

我是否遗漏了有关未正确设置 SharedPreference 的片段生命周期的一些基本信息?

谢谢....

已解决:我需要在 MainActivity 的 OnPageChangeListener class 中设置 SharedPreferences,而不是在 Fragments 中(doh!)。

mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
            SharedPreferences.Editor editor = prefs.edit().putInt("tabPref", position);
            editor.apply();
        }
});