将 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();
}
});
我在使用 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();
}
});