我正在使用一个名为SettingsActivity
的活动,它扩展了PreferenceFragmentCompat
。当应用程序第一次启动MainActivity
时,我试图通过getDefaultSharedPreferences(getApplicationContext())
获取首选项,但没有成功,因为它们只有在我启动"设置"活动时才会加载。
为了证明这一点,我检查了文件shared_preferences.xml,只有当我打开SettingsActivity
时,它才会被填充。
从这个意义上讲,我如何才能强制加载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
}
}
在活动的onCreate
中放置以下代码
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
参考Android开发者文档