mkounal
mkounal

Reputation: 783

UI refreshing at PreferenceActivity

I have a PreferenceActivity where I represent a setting UI, when I press the first checkbox then the second checkbox becomes visible. On the other hand, when the first checkbox is unchecked the second checkbox is hidden(and gets a default value to false).

The problem is that I need my UI screen to be refreshed the moment I check(or uncheck) the first checkbox because right now with that code I need to go to another Activity (e.g when I press the back button) and then get back to the PreferenceActivity again in order to see the changes on my UI.

Code for PreferenceActivity:

public class SetPreference extends PreferenceActivity implements
        OnSharedPreferenceChangeListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.checkboxpref);
    }

    @Override
    protected void onStart() {
        super.onStart();

        Preference checkbox = findPreference("checkBox_Schedule");

        SharedPreferences prefs = PreferenceManager
                .getDefaultSharedPreferences(this);

        if (prefs.getBoolean("checkBox", true)) {

        } else {

            ((PreferenceGroup) findPreference("category_second"))
                    .removePreference(checkbox);

            SharedPreferences.Editor geted = prefs.edit();
            geted.putBoolean("checkBox_Schedule", false);
            geted.commit();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();

    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
        // TODO Auto-generated method stub

    }

}

Code for XML:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <PreferenceCategory
        android:summary="Username and password information"
        android:title="Login information" >
        <EditTextPreference
            android:key="username"
            android:summary="Please enter your login username"
            android:title="Username" />
        <EditTextPreference
            android:inputType="textPassword"
            android:key="password"
            android:summary="Enter your password"
            android:title="Password" />
    </PreferenceCategory>
    <PreferenceCategory
        android:summary="Username and password information"
        android:title="Settings"
        android:key="category_first" >
        <CheckBoxPreference
            android:key="checkBox"
            android:summary="On/Off"
            android:title="Keep me logged in" />

        <ListPreference
            android:entries="@array/listOptions"
            android:entryValues="@array/listValues"
            android:key="listpref"
            android:summary="List preference example"
            android:title="List preference" />
    </PreferenceCategory>
    <PreferenceCategory
        android:summary="schedule"
        android:key="category_second"
        android:title="Schedule" >
        <CheckBoxPreference
            android:key="checkBox_Schedule"
            android:summary="On/Off"
            android:title="Keep me logged in" />
    </PreferenceCategory>

</PreferenceScreen>

Thank you for your time.

Upvotes: 2

Views: 1965

Answers (1)

Boris Strandjev
Boris Strandjev

Reputation: 46943

Ok then just restart the activity when the checkbox is selected/deselected:

startActivity(new Intent(PreferencesActivity.this, PreferencesActivity.class));
finish();

Consider using onPreferenceSelectedListener for the first checkbox to detect the act of checking/unchecking the preference.

Upvotes: 1

Related Questions