I've a strange issue with SharedPreferences and boolean.
I've set this code in my xml:
xml:
<CheckBoxPreference
android:key="onlywifiupload"
android:defaultValue="true"
android:summary="#string/summary_onlywifiupload"
android:title="#string/title_onlywifiupload"
/>
and from the Java code, I'm calling:
boolean onlywifiupload = pref.getBoolean("onlywifiupload", true);
Even the checkbox is checked or unchecked, in onlywifiupload there's always true.
Same with setting:
boolean onlywifiupload = pref.getBoolean("onlywifiupload", false);
It seems the default value is always loaded instead of checked values.
It seems the only way to make it working is:
mPrefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
onlywifiupload = mPrefs.getBoolean("onlywifiupload", true);
don't know why I need to call getDefaultSharedPreferences from PrefenceManager object
Before that, I was calling the preferences in this way:
pref = getSharedPreferences("AppPref", MODE_PRIVATE);
Related
For the application I am working on, I need to have a preference screen, which has a EditTextPreference, SwitchPreference and a VolumePreference. I am using the VolumePreference as I need a preference that is set with a slider, and VolumePreference was the only one I could find that fit the bill. Here is my Preference XML:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference
android:capitalize="words"
android:defaultValue="#string/pref_default_channel"
android:inputType="number"
android:key="pref_channel"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="#string/pref_title_channel"
android:summary="#string/pref_summary_channel"/>
<SwitchPreference
android:key="pref_customVol"
android:title="#string/pref_title_custom_vol"
android:summary="#string/pref_summary_custom_vol"
android:defaultValue="false" />
<VolumePreference
android:name="Volume Preference"
android:title="Notification Volume"
android:summary="Set your notification volume, so you will be notified when your Seahorse is almost finished running"
android:key="pref_notifVolPref"
android:dependency="pref_customVol"/>
I am able to get the value set by the SwitchPreference easily from shared preferences, using the code:
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
boolean customVol = sharedPref.getBoolean("pref_customVol", false);
However, when I try to do the same to get the value from my VolumePreference, it always returns the default value of -1. Here is the code I use to retrieve the volume preference:
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
int vol = sharedPref.getBoolean("pref_notifVolPref", -1);
Am I using the VolumePreference incorrectly? Do I need to create my own custom preference to display a slider preference? Has anyone had this issue before? Thanks
first extends PreferenceActivity
second add this to onCreate()
addPreferencesFromResource(R.xml.account_preferences);
Preference checkPreference = getPreferenceScreen().findPreference("checkbox_contacts_sync");
Preference.OnPreferenceChangeListener lis1 = new Preference.OnPreferenceChangeListener()
{
#Override
public boolean onPreferenceChange(Preference preference, Object o)
{
Toast.makeText(SystemManager.getAppContext(), "yess", Toast.LENGTH_LONG).show();
return true;
}
};
checkPreference.setOnPreferenceChangeListener(lis1);
and add this to layout
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible"
android:id="#android:id/list">
</ListView>
Or in main activity use this.
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.OnSharedPreferenceChangeListener shListener = new SharedPreferences.OnSharedPreferenceChangeListener()
{
#Override
public void onSharedPreferenceChanged(SharedPreferences sharedPref, String key)
{
Assistance.print("change");
Toast.makeText(SystemManager.getAppContext(),"ohh",Toast.LENGTH_LONG).show();
}
};
sharedPreferences.registerOnSharedPreferenceChangeListener(shListener);
http://developer.android.com/reference/android/preference/Preference.html#attr_android:dependency
if I want my list to be dependent from other check preference named on_off I can do this
<ListPreference
android:defaultValue="100"
android:dependency="on_off"
android:dialogTitle="text"
android:entries="#array/display_values"
android:entryValues="#array/entry_values"
android:key="preferences_text"
android:summary="text"
android:title="text" />
and every time when the check preference on_off have value false this list preference will be disabled.
But what If I want everytime when on_off is true the list preference to be disabled ?
I need something like logical NOT for the android:dependency
is this possible ?
In preference XML, set android:disableDependentsState attribute of the "on_off" CheckBoxPreference to true. E.g.:
<CheckBoxPreference
android:disableDependentsState="true"
android:key="on_off"
android:summaryOff="Dependent is enabled"
android:summaryOn="Dependent is disabled"
android:title="Checkbox that disables its dependents state in reverse manner" />
You can implement it in the code:
chb = (CheckBoxPreference) findPreference("chb");
list = (ListPreference) findPreference("list");
chb.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
list.setEnabled(!chb.isChecked());
return false;
}
});
So I have checkbox in settings to enter the different xml
<CheckBoxPreference android:title="Full Screen"
android:defaultValue="false"
android:key="checkbox3"
I use if checkbox3 is not checked then setContentView(1st xml) if it is checked setContentView(second xml)
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean samples = getPrefs.getBoolean("checkbox3", true);
if(samples==false)
setContentView(R.layout.activity_main);
else{
setContentView(R.layout.fullscreen);
}
My problem is that default value of checkbox is false so when you first run application it should setContentView(R.layout.activity_main); but it enters setContentView(R.layout.activity_main); even if it is "false" in settings.
Change boolean samples = getPrefs.getBoolean("checkbox3", true); to boolean samples = getPrefs.getBoolean("checkbox3", false);
You have set the default value to true instead of false
You are mistaken the default value of Check box is true according to your code:
boolean samples = getPrefs.getBoolean("checkbox3", true);
Change it to
boolean samples = getPrefs.getBoolean("checkbox3", false);
And you be fine
Hello I need to know how to set a value programmatically.
I am using that code
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
.
.
.
SharedPreferences.Editor geted = prefs.edit();
geted.putBoolean("checkBox_Schedule", false);
geted.commit();
But I dont see anything change
The code of my xml for my checkboxPreference is
<CheckBoxPreference
android:defaultValue="false"
android:dependency="checkBox"
android:key="checkBox_Schedule"
android:summary="On/Off"
android:title="Schedule" />
One solution is to do
startActivity(new Intent(SetPreference.this, SetPreference.class));
But this is not what I want to do.
CheckBoxPreference showContact = (CheckBoxPreference)findPreference("myPreference");
showContact.setChecked(false);
You can call this in your preference activity
CheckBoxPreference pref = (CheckBoxPreference)findPreference("example_pref_key");
pref.setChecked(false);
Hey everyone, I'm trying to make an activity so that when a CheckBox Preference is enabled (true), programmatically the on-screen keyboard InputType will change. I want the user to have the option to turn on/off the keyboard's email address option while keeping the inputType's already set.
Essentially doing the equivalent of changing:
android:inputType="textAutoCorrect|textCapSentences|textMultiLine"
to
android:inputType="typeAutoCorrect|textCapSentences|textmultiLine|textEmailAddress"
Preferences.xml
<CheckBoxPreference android:key="pref_key_enable_email"
android:title="#string/pref_title_enable_email"
android:summary="#string/pref_summary_enable_email"
android:defaultValue="false" />
This is what I have as of now.
public void setInputType(int type) {
boolean showEmail = false;
// Show the Email keyboard if the pref_key_enable_email preference is TRUE
mTextEditor = (EditText) findViewById(R.id.embedded_text_editor);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if(prefs.getBoolean("pref_key_enable_email",false)== true){
showEmail = true;
if (showEmail) {
mTextEditor.setInputType(InputType.TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_EMAIL_ADDRESS); w
} else {
mTextEditor.getInputType();
}
}
I've checked the /data/data/myappname/shared_prefs com.myappnamehere.preferences.xml. I at least know that the boolean values do change from false to true when the box is checked. It just doesn't do anything :(
Consider cleaning your code a little bit
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean showEmail = prefs.getBoolean("pref_key_enable_email",false);
mTextEditor = (EditText) findViewById(R.id.embedded_text_editor);
if(showEmail) {
mTextEditor.setInputType( mTextEditor.getInputType() | TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
}
I'm assuming you have your "default" flags in the xml for your layout:
android:inputType="textAutoCorrect|textCapSentences|textMultiLine"