【发布时间】: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