我有两个(第一个和最后一个见过)我的XML中的切换首选项默认为" true"其余的"假。"
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="Radar">
<SwitchPreference
android:defaultValue="true"
android:key="current_radar"
android:title="Current Radar"/>
<SwitchPreference
android:defaultValue="false"
android:key="current_satellite"
android:title="Current Satellite"/>
</PreferenceCategory>
<PreferenceCategory
android:title="Maps">
<SwitchPreference
android:defaultValue="false"
android:key="fire"
android:title="Fire"/>
<SwitchPreference
android:defaultValue="false"
android:key="flood"
android:title="Flood"/>
<SwitchPreference
android:defaultValue="false"
android:key="hurricane"
android:title="Hurricane"/>
<SwitchPreference
android:defaultValue="false"
android:key="tornado"
android:title="Tornado"/>
</PreferenceCategory>
<PreferenceCategory
android:title="Social Media">
<SwitchPreference
android:defaultValue="true"
android:key="twitter"
android:title="Twitter"/>
</PreferenceCategory>
</PreferenceScreen>
我希望这两个显示为真,但每次运行我的应用时它们都会显示为假。
这是我的
package com.example.user.weatherdashboardandroid;
import android.annotation.TargetApi;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.view.MenuItem;
/**
* A {@link PreferenceActivity} that presents a set of application settings. On
* handset devices, settings are presented as a single list. On tablets,
* settings are split by category, with category headers shown to the left of
* the list of settings.
* <p>
* See <a href="http://developer.android.com/design/patterns/settings.html">
* Android Design: Settings</a> for design guidelines and the <a
* href="http://developer.android.com/guide/topics/ui/settings.html">Settings
* API Guide</a> for more information on developing a Settings UI.
*/
public class DataFeeds extends AppCompatPreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new GeneralPreferenceFragment()).commit();
}
/**
* This method stops fragment injection in malicious applications.
* Make sure to deny any unknown fragments here.
*/
protected boolean isValidFragment(String fragmentName) {
return PreferenceFragment.class.getName().equals(fragmentName)
|| GeneralPreferenceFragment.class.getName().equals(fragmentName);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class GeneralPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_general);
setHasOptionsMenu(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
startActivity(new Intent(getActivity(), MainActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
}
}
我发现其他类似性质的问题,例如this建议使用: `
PreferenceManager.setDefaultValues(this, R.xml.preference, false);
在这个类的OnCreate中,我的MainActivity和上面显示的片段(上下文是片段&#39; OnCreate中的getActivity()),但没有一个对我有用。
随机地,Fire开关即使默认为false也会显示。是否有一些问题可能是因为一个班级有太多开关?
如何解决我的问题?
答案 0 :(得分:1)
好的,这令人沮丧。显然,在更改SwitchPreference defaultValue之后,必须将Android Studio中的XML视图从Text切换到Design。这需要半秒钟,但随后您会看到Switch移动到它的预期位置。那么,当你重新安装应用程序时,它的工作原理。 WTF。我已经多次尝试过来证实这一点。这是列在doc的某个地方吗?
答案 1 :(得分:0)
尝试在GeneralPreferenceFragment的onCreate方法中添加这些行。
SwitchPreference currentRadarPref = (SwitchPreference) getPreferenceManager().findPreference("current_radar");
currentRadarPref.setChecked(getPreferenceManager().getSharedPreferences().getBoolean("current_radar", true));
SwitchPreference twitterPref = (SwitchPreference) getPreferenceManager().findPreference("twitter");
currentRadarPref.setChecked(getPreferenceManager().getSharedPreferences().getBoolean("twitter", true));
如果上述代码不适合您,请按照以下步骤操作:
首先删除来自首选项xml文件的这两个SwitchPreferences的 defaultValue 属性。
然后在GeneralPreferenceFragment的onCreate方法中添加以下代码:
Boolean defaultValue = true;
SwitchPreference currentRadarPref = (SwitchPreference) getPreferenceManager().findPreference("current_radar");
currentRadarPref .setDefaultValue(defaultValue);
currentRadarPref.setChecked(getPreferenceManager().getSharedPreferences().getBoolean("current_radar", true));
SwitchPreference twitterPref = (SwitchPreference) getPreferenceManager().findPreference("twitter");
twitterPref.setDefaultValue(defaultValue);
twitterPref.setChecked(getPreferenceManager().getSharedPreferences().getBoolean("twitter", true));
答案 2 :(得分:0)
PreferenceManager.setDefaultValues(this, R.xml.pref_general, false);
而不是:
PreferenceManager.setDefaultValues(this, R.xml.preference, false);