我正在制作我的第一个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>
答案 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是什么?