Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SwitchPreference and CheckBoxPreference in code

I am now creating a preference page for my app

After API-14, switchpreference is available. and i would like to use it to replace checkboxpreference on API14+ devices

It is easy to use res/xml and res/xml-14 to get the correct xml resource

However, in the coding part, it is not so convenient to switching the preference according to the API.

public class SettingActivity extends PreferenceActivity {
    private CheckBoxPreference enable;
    private SwitchPreference enablev14;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        addPreferencesFromResource(R.xml.setting);
        if (Build.VERSION.SDK_INT < 14)
            enable = (CheckBoxPreference) findPreference(key_enable);
        else
            enablev14 = (SwitchPreference) findPreference(key_enable);
    }
    ...
}

Now my way is to use if-clause to check the Build.VERSION and get the corresponding object to process it. But it is quite inconvenient and hard to manage the code. Do anyone has a smarter way to do it?

like image 346
Chiman Avatar asked Aug 24 '13 02:08

Chiman


People also ask

What is preference screen?

This settings screen is used to manage the preferences of the users. For creating this settings screen android provides a feature to make a settings preferences screen. In this article, we will take a look at implementing the preferences setting screen in Android.

What is switch preference android?

androidx.preference.SwitchPreference. A Preference that provides a two-state toggleable option. This preference will save a boolean value to android. content. SharedPreferences .


2 Answers

Maybe you could set an android:key attribute to both of your SwitchPreference and CheckBoxPreference xml, just like this:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <CheckBoxPreference
        android:key="pref_sync"
        android:title="@string/pref_sync"
        android:defaultValue="true" />
</PreferenceScreen>

and

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <SwitchPreference
        android:key="pref_sync"
        android:title="@string/pref_sync"
        android:defaultValue="true" />
</PreferenceScreen>

And then you can check if this key returns true or false on your code, something like this:

public class SettingActivity extends PreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    addPreferencesFromResource(R.xml.setting);
    PreferenceManager preferenceManager = getPreferenceManager();
    if (preferenceManager.getSharedPreferences().getBoolean("pref_sync", true)){
        // Your switch is on
    } else {
        // Your switch is off
    }
    ...
}

Hope this works for you.

like image 111
Renan Ferrari Avatar answered Oct 16 '22 11:10

Renan Ferrari


In your Java code use TwoStatePreference, which is a parent class for both CheckBoxPreference and SwitchPreference. It has all the methods you are likely to need in your use case.

This is what the code sample you provided would look like:

public class SettingActivity extends PreferenceActivity {
    private TwoStatePreference enable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        addPreferencesFromResource(R.xml.setting);
        enable = (TwoStatePreference) findPreference(key_enable);
    }
    ...
}
like image 6
AleXqwq Avatar answered Oct 16 '22 12:10

AleXqwq