onSharedPreferenceChanged突然停止工作

时间:2014-05-28 18:30:41

标签: android preferences

我正在制作我的第一个Android应用,而且我没有想法如何解决这个问题:

我完成了我的偏好设置,一切都很好,onSharedPreferenceChanged就像一个魅力。然后我决定添加更多选项 - 这不应该是一个问题,对吧?我已经添加了custom Preference来选择时间,更新了带有首选项的.xml文件,启动了应用程序,发现onSharedPreferenceChanged没有工作任何人。我尝试评论新内容但是没有用。

你知道是什么原因引起的吗?

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:

<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>

1 个答案:

答案 0 :(得分:0)

我没有看到&#39; setContentView(....);&#39;在下面的代码中

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

BTW,它显示的LogCat是什么?