我遇到的问题是我认为只是简单使用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的片段生命周期的基本内容?
...谢谢
答案 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();
}
});