Android OnSharedPreferenceChangeListener回调从未执行
我的主要活动是启动新活动(Android OnSharedPreferenceChangeListener回调从未执行,android,sharedpreferences,android-preferences,Android,Sharedpreferences,Android Preferences,我的主要活动是启动新活动(SearchResultsActivity)。 我还有一个设置菜单 我希望每当设置菜单中有新的/编辑的设置时,都会通知我的SearchResultsActivity 我正在实现OnSharedPreferenceChangeListener上的SearchResultsActivity接口,并注册自己以侦听设置中的任何修改,但由于某些奇怪的原因,回调从未执行 这是我的SearchResultsActivitycode public class SearchResults
SearchResultsActivity
)。
我还有一个设置菜单
我希望每当设置菜单中有新的/编辑的设置时,都会通知我的SearchResultsActivity
我正在实现OnSharedPreferenceChangeListener
上的SearchResultsActivity
接口,并注册自己以侦听设置中的任何修改,但由于某些奇怪的原因,回调从未执行
这是我的SearchResultsActivity
code
public class SearchResultsActivity extends BaseActivity implements SearchResultsFragment.RouteResultsFragmentCommunicator, SharedPreferences.OnSharedPreferenceChangeListener {
private static final String TAG = SearchResultsActivity.class.getSimpleName();
private FragmentManager mFragmentManager;
private SearchResultsFragment mSearchResultsFragment;
private RouteFragment mRouteFragment;
private SharedPreferences pref;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_results);
// Set the toolbar
activateToolbarWithHomeEnabled();
pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
// Initialize the FragmentManager
mFragmentManager = getFragmentManager();
mSearchResultsFragment = (SearchResultsFragment) mFragmentManager.findFragmentById(R.id.searchRouteResultsFragment);
}
@Override
protected void onResume() {
super.onResume();
pref.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
protected void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
@Override
protected void onPause() {
pref.unregisterOnSharedPreferenceChangeListener(this);
super.onPause();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Log.d(TAG, "onSharedPreferenceChanged callback");
}
}
为了简单起见,我删除了与我的问题无关的部分代码
所以我的问题是,当我更改任何设置时,“onSharedPreferenceChanged回调”永远不会打印在logcat上
以防万一,下面是我的设置实现:
public class MySettings extends BaseActivity {
private static final String TAG = MySettings.class.getSimpleName();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pref_with_actionbar);
// Set the toolbar
activateToolbarWithHomeEnabled();
getFragmentManager().beginTransaction().replace(R.id.content_frame, new MyPreferenceFragment()).commit();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id==android.R.id.home) {
finish();
return true;
}
else {
return super.onOptionsItemSelected(item);
}
}
}
片段:
public class MyPreferenceFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
private static final String TAG = MyPreferenceFragment.class.getSimpleName();
private EditTextPreference mMaxRadius;
private SharedPreferences mSharedPreferences;
private CheckBoxPreference mCheckBoxPreference;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
mMaxRadius = (EditTextPreference) findPreference(getResources().getString(R.string.pref_radius_key));
mSharedPreferences = getPreferenceManager().getSharedPreferences();
String maxRadius = mSharedPreferences.getString(getResources().getString(R.string.pref_radius_key), "Unknown");
mMaxRadius.setSummary("Max Radius: " + maxRadius);
mCheckBoxPreference = (CheckBoxPreference) findPreference(getString(R.string.pref_order_list_key));
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equalsIgnoreCase(getResources().getString(R.string.pref_radius_key))) {
Preference connectionPref = findPreference(key);
// Set summary to be the user-description for the selected value
connectionPref.setSummary(sharedPreferences.getString(key, "Unknown") + " km");
}
else if (key.equalsIgnoreCase(getString(R.string.pref_order_list_key))) {
Preference orderByPreference = findPreference(key);
}
}
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
}
请注意,在MyPreferenceFragment
上,会按预期调用onSharedPreferenceChanged
,每当设置发生更改时,就会执行MyPreferenceFragment\onSharedPreferenceChanged
。但是,SearchResultsActivity\onSharedPreferenceChanged
从未被调用
有人能解释一下当我更改设置时,
SearchResultsActivity\onSharedPreferenceChanged
从未被执行有什么问题吗?在onCreate()
中注册您的侦听器,并在onDestroy()
中取消注册。当您启动首选项活动时,您的主要活动将暂停并取消注册。哦,我犯了一个愚蠢的错误。我想是时候休息一下了。谢谢你的帮助和时间。