0
我試圖在首選項更改時使用新設置重新啓動服務。我正在使用的代碼大致是從this question類似於:在android偏好片段中使用startService()
SettingsActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initiate listener
findPreference("service_switch").setOnPreferenceChangeListener(sRestartMyServiceOnChangeListener);
...
}
private Preference.OnPreferenceChangeListener sRestartMyServiceOnChangeListener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object obj) {
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(SettingsActivity.this);
// Stop service
stopService(new Intent(SettingsActivity.this, MyService.class));
// Restart service
if (sharedPref.getBoolean("service_switch", false)) {
startService(new Intent(SettingsActivity.this, MyService.class));
}
return true;
}
};
這並不是我的手機上,引發錯誤:
findPreference(java.lang.CharSequence) is deprecated
This answer表示Android已經轉移到基於片段的活動。 SettingsActivity
是基於片段的......所以我試着開始在片段的onCreate()
聽衆:
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class GeneralPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
// Initiate listener
findPreference("service_switch").setOnPreferenceChangeListener(sRestartMyServiceOnChangeListener);
...
}
}
現在我沒有看到棄用錯誤,但我得到一個新問題:
Non-static field 'sRestartMyServiceOnChangeListener' cannot be referenced from a static context.
我不能讓sRestartMyServiceOnChangeListener
爲靜態,因爲stopService()
和startService()
都是非靜態的。我也無法使片段變爲靜態:
This fragment inner class should be static
那麼,如何在設置更改時從首選項片段重新啓動MyService?
爲什麼不能將GeneralPreferenceFragment設置爲非靜態? – 7383
它引發錯誤「此片段內部類應該是靜態的」。 – Keith
你的外班是什麼,內班有什麼需要?請發佈完整的代碼以獲得更好的理解。 – 7383