如何在第一次应用程序启动时加载共享首选项

How to load Shared Preferences on first Application start

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

为了证明这一点,我检查了文件 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
    }
}

在您的 activity 的 onCreate 中放置以下代码

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

参考Android Developers Docs