1

I'm working on my first Android app and I'm out of ideas how to solve this thing:

I finished my Preferences and everything was fine, onSharedPreferenceChanged was working like a charm. Then I decided to add some more options - that shouldn't be a problem, right? I have added custom Preference to pick time, updated .xml file with preferences, launched the app and found out that onSharedPreferenceChanged wasn't working anyomore. I tried commenting the new content but that didn't work.

Do you have any idea what could have caused that?

public class UstawieniaDawkiActivity extends Activity  {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    getFragmentManager().beginTransaction()
    .replace(android.R.id.content, new UstawieniaFragment())
    .commit();
}

public static class UstawieniaFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener 
{
    //ZMIENNE
    private int wartoscCyklu;
    //ENDOF ZMIENNE

    //GETSET
    public int getWartoscCyklu() 
    {
        wartoscCyklu = Integer.parseInt(getPreferenceScreen().getSharedPreferences().getString(getString(R.string.cykl_preference_key), "-1"));
        return wartoscCyklu;
    }
    public void setWartoscCyklu(int wartosc_cyklu) {
        this.wartoscCyklu = wartosc_cyklu;
    }
    //ENDOF GETSET

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);      
        addPreferencesFromResource(R.xml.ustawienia_dawki);
    }
    @Override
    public void onResume() {
        super.onResume();
        blokujDni(getWartoscCyklu());
        blokujGodzinePowiadomienia();
        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onPause() {
        super.onPause();
        getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) 
    {
        if(key.equals(R.string.cykl_preference_key))
        {
            blokujDni(getWartoscCyklu());
        }
        else
        {
            if(key.equals(R.string.powiadomienia_checkbox))
            {
                blokujGodzinePowiadomienia();
            }
        }
    }
    private void blokujGodzinePowiadomienia()
    {
        getPreferenceScreen().findPreference(getString(R.string.godzina_powiadomien)).setEnabled
        ((getPreferenceScreen().getSharedPreferences().getBoolean(getString(R.string.powiadomienia_checkbox), false)));
    }
    private void blokujDni(int dlugoscCyklu)
    {
        switch(dlugoscCyklu)
        {
        case 1:
            getPreferenceScreen().findPreference(getString(R.string.dzien1_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien2_preference_key)).setEnabled(false);
            getPreferenceScreen().findPreference(getString(R.string.dzien3_preference_key)).setEnabled(false);
            getPreferenceScreen().findPreference(getString(R.string.dzien4_preference_key)).setEnabled(false);
            getPreferenceScreen().findPreference(getString(R.string.dzien5_preference_key)).setEnabled(false);
            getPreferenceScreen().findPreference(getString(R.string.dzien6_preference_key)).setEnabled(false);
            getPreferenceScreen().findPreference(getString(R.string.dzien7_preference_key)).setEnabled(false);
            break;
        case 2:
            getPreferenceScreen().findPreference(getString(R.string.dzien1_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien2_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien3_preference_key)).setEnabled(false);
            getPreferenceScreen().findPreference(getString(R.string.dzien4_preference_key)).setEnabled(false);
            getPreferenceScreen().findPreference(getString(R.string.dzien5_preference_key)).setEnabled(false);
            getPreferenceScreen().findPreference(getString(R.string.dzien6_preference_key)).setEnabled(false);
            getPreferenceScreen().findPreference(getString(R.string.dzien7_preference_key)).setEnabled(false);
            break;
        case 3:
            getPreferenceScreen().findPreference(getString(R.string.dzien1_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien2_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien3_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien4_preference_key)).setEnabled(false);
            getPreferenceScreen().findPreference(getString(R.string.dzien5_preference_key)).setEnabled(false);
            getPreferenceScreen().findPreference(getString(R.string.dzien6_preference_key)).setEnabled(false);
            getPreferenceScreen().findPreference(getString(R.string.dzien7_preference_key)).setEnabled(false);
            break;
        case 4:
            getPreferenceScreen().findPreference(getString(R.string.dzien1_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien2_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien3_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien4_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien5_preference_key)).setEnabled(false);
            getPreferenceScreen().findPreference(getString(R.string.dzien6_preference_key)).setEnabled(false);
            getPreferenceScreen().findPreference(getString(R.string.dzien7_preference_key)).setEnabled(false);
            break;
        case 5:
            getPreferenceScreen().findPreference(getString(R.string.dzien1_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien2_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien3_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien4_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien5_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien6_preference_key)).setEnabled(false);
            getPreferenceScreen().findPreference(getString(R.string.dzien7_preference_key)).setEnabled(false);
            break;
        case 6:
            getPreferenceScreen().findPreference(getString(R.string.dzien1_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien2_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien3_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien4_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien5_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien6_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien7_preference_key)).setEnabled(false);
            break;
        case 7:
            getPreferenceScreen().findPreference(getString(R.string.dzien1_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien2_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien3_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien4_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien5_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien6_preference_key)).setEnabled(true);
            getPreferenceScreen().findPreference(getString(R.string.dzien7_preference_key)).setEnabled(true);
            break;
        }
    }
}

}

XML with preferences:

<PreferenceCategory android:title="Powiadomienia">
    <CheckBoxPreference android:key="@string/powiadomienia_checkbox" android:summary="przypomnienia o zażyciu" android:title="Powiadomienia" />
    <com.frostysoftware.tarczoid.TimePreference android:key="@string/godzina_powiadomien" android:title="Godzina powiadomienia" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/cykl_preference_category">
    <ListPreference android:key="@string/cykl_preference_key" android:title="@string/cykl_preference_title" android:summary="@string/cykl_preference_summary" android:entryValues="@array/dlugosci_cyklu_values" android:entries="@array/dlugosci_cyklu" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/konfiguracja_cyklu_preference_category">
    <ListPreference android:summary="@string/dzien_preference_summary" android:title="@string/dzien1_preference_title" android:key="@string/dzien1_preference_key" android:entryValues="@array/dawki_leku_values" android:entries="@array/dawki_leku" />
    <ListPreference android:summary="@string/dzien_preference_summary" android:title="@string/dzien2_preference_title" android:entryValues="@array/dawki_leku_values" android:key="@string/dzien2_preference_key" android:entries="@array/dawki_leku" />
    <ListPreference android:summary="@string/dzien_preference_summary" android:title="@string/dzien3_preference_title" android:entryValues="@array/dawki_leku_values" android:key="@string/dzien3_preference_key" android:entries="@array/dawki_leku" />
    <ListPreference android:summary="@string/dzien_preference_summary" android:title="@string/dzien4_preference_title" android:entryValues="@array/dawki_leku_values" android:key="@string/dzien4_preference_key" android:entries="@array/dawki_leku" />
    <ListPreference android:summary="@string/dzien_preference_summary" android:title="@string/dzien5_preference_title" android:entryValues="@array/dawki_leku_values" android:key="@string/dzien5_preference_key" android:entries="@array/dawki_leku" />
    <ListPreference android:summary="@string/dzien_preference_summary" android:title="@string/dzien6_preference_title" android:entryValues="@array/dawki_leku_values" android:key="@string/dzien6_preference_key" android:entries="@array/dawki_leku" />
    <ListPreference android:summary="@string/dzien_preference_summary" android:title="@string/dzien7_preference_title" android:entryValues="@array/dawki_leku_values" android:key="@string/dzien7_preference_key" android:entries="@array/dawki_leku" />
</PreferenceCategory>

Community
  • 1
  • 1
Frosty
  • 51
  • 3

1 Answers1

0

I don't see 'setContentView(....);' in the below code

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    getFragmentManager().beginTransaction()
    .replace(android.R.id.content, new UstawieniaFragment())
    .commit();
}

BTW, what is the LogCat it shows ?

Ramakishna Balla
  • 1,020
  • 1
  • 8
  • 12
  • I used PreferenceFragment, so setContentView() isn't needed. addPreferencesFromResource() takes care of everything. LogCat doesn't say much or I'm not using it correctly. – Frosty May 29 '14 at 09:36