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>