将片段中的SharedPreference设置为选项卡

时间:2015-06-03 08:48:18

标签: android-fragments tabs sharedpreferences

我遇到的问题是我认为只是简单使用SharedPreferences!

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

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

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

其中"tabPref", 0是pref的名称和Tab的编号(0-3)。

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

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

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

我是否遗漏了未正确设置SharedPreference的片段生命周期的基本内容?

...谢谢

1 个答案:

答案 0 :(得分:0)

解决:我需要在MainActivity中的OnPageChangeListener类中设置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();
        }
});