首次运行App为何显示默认值US而非预期的-1?
问题:首次运行App时Toast显示默认值US而非预期的-1
按照Android官方教程使用Settings Activity模板开发,模板生成root_preferences.xml而非多份偏好屏幕XML文件,我基本遵循步骤实现。教程指出首次运行App时Toast应显示-1(因为尚未修改设置),但实际首次运行显示US——我知道XML里默认值设为US,但教程同样设置默认值为US却预期显示-1,这是为什么?
代码实现
SettingsActivity.java
package com.example.droidcafe; import android.os.Bundle; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.preference.PreferenceFragmentCompat; public class SettingsActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.settings_activity); if (savedInstanceState == null) { getSupportFragmentManager() .beginTransaction() .replace(R.id.settings, new SettingsFragment()) .commit(); } ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } } public static class SettingsFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.root_preferences, rootKey); } } }
MainActivity.java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, OrderActivity.class); intent.putExtra(EXTRA_MESSAGE, mOrderMessage); startActivity(intent); } }); PreferenceManager.setDefaultValues(this, R.xml.root_preferences, false); SharedPreferences sharedPref = PreferenceManager .getDefaultSharedPreferences(this); String marketPref = sharedPref .getString("market", "-1"); displayToast(marketPref); }
root_preferences.xml
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"> <PreferenceCategory app:title="@string/pref_header_account"> <ListPreference app:defaultValue="US" app:entries="@array/pref_market_titles" app:entryValues="@array/pref_market_values" app:key="market" app:negativeButtonText="@null" app:positiveButtonText="@null" app:title="@string/pref_title_account" /> </PreferenceCategory> </PreferenceScreen>
strings.xml
<string name="pref_header_account">Account</string> <!-- Sync Preferences --> <string name="pref_title_account">Market</string> <string-array name="pref_market_titles"> <item>United States</item> <item>Canada</item> <item>United Kingdom</item> <item>India</item> <item>Japan</item> <item>Other</item> </string-array> <string-array name="pref_market_values"> <item>US</item> <item>CA</item> <item>UK</item> <item>IN</item> <item>JA0</item> <item>-1</item> </string-array>
运行结果
首次运行App时,Toast显示:
教程预期显示:-1
教程中的默认值设置截图:
核心疑问:我知道XML里默认值设为US,但教程同样设置默认值为US却预期首次显示-1,这是为什么?
内容的提问来源于stack exchange,提问作者Cataster
相关产品推荐
相关产品推荐

