【问题标题】:How to load Shared Preferences on first Application start如何在第一次应用程序启动时加载共享首选项
【发布时间】:2020-07-08 14:41:45
【问题描述】:

我正在使用一个名为 SettingsActivity 的活动,它扩展了 PreferenceFragmentCompat。当应用程序第一次启动MainActivity 时,我尝试通过getDefaultSharedPreferences(getApplicationContext()) 获取首选项但没有成功,因为它们仅在我启动设置活动时加载。

为了证明这一点,我检查了文件 shared_preferences.xml,只有当我打开 SettingsActivity 时它才会被填充。

从这个意义上说,我如何强制加载MainActivity 中的首选项?

MainActivity

public class MainActivity extends AppCompatActivity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Map<String, ?> allPreferences = getDefaultSharedPreferences(MainActivity.applicationContext).getAll();
        Log.d(Class.forName(), allPreferences.isEmpty()); //prints true

        Intent intent_settings = new Intent(activityContext, SettingsActivity.class);
        startActivity(intent_settings);
     }
}

设置活动

public class SettingsActivity extends PreferenceFragmentCompat {
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);

        setPreferencesFromResource(R.xml.preferences, rootKey);

        Map<String, ?> allPreferences = getPreferenceManager().getSharedPreferences().getAll();
        Log.d(Class.forName, allPreference.isEmpty()); // prints false
    }
}

【问题讨论】:

  • 你能分享代码吗?如果您尝试通过键获取首选项,但它还不存在,则有一个默认值。
  • @romulus 我现在分享了代码。
  • 接受的答案使用不推荐使用的类。见:stackoverflow.com/questions/56833657/…

标签: android sharedpreferences android-preferences


【解决方案1】:

在您的活动的onCreate 中放置以下代码

PreferenceManager.setDefaultValues(this, R.xml.preferences, false);

参考Android Developers Docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多