Android onSharedPreferencesChanged在首选项活动首次启动时触发

Android onSharedPreferencesChanged在首选项活动首次启动时触发,android,Android,我已为我的应用程序注册了onSharedPreferencesChanged侦听器。如果我第一次安装我的应用程序,SharedReferencesChanged监听器会被触发,但它不应该被触发 这是我的密码: onSharedPrefChangedListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onShared

我已为我的应用程序注册了onSharedPreferencesChanged侦听器。如果我第一次安装我的应用程序,SharedReferencesChanged监听器会被触发,但它不应该被触发

这是我的密码:

onSharedPrefChangedListener = new SharedPreferences.OnSharedPreferenceChangeListener() {


            @Override
            public void onSharedPreferenceChanged(
                    SharedPreferences sharedPreferences, String key) {
                // TODO Auto-generated method stub
                 if(key.equals(ENABLE_BANNER_AD_PREFERENCE_KEY)){
        Toast.makeText(FragmentTabsPager.this,getString(R.string.will_disable_restart), Toast.LENGTH_SHORT).show();
                }

            }

        };
        sharedPreferences.registerOnSharedPreferenceChangeListener(onSharedPrefChangedListener);
这就是XML中的首选项:

 <CheckBoxPreference android:title="@string/title"
                        android:summary="@string/summary"
                        android:icon="@drawable/icon"
                        android:defaultValue="true"
                         android:key="bannerKey"> </CheckBoxPreference>

当我在安装后第一次启动应用程序时,会出现Toast。如果我再次启动应用程序并导航到首选项,则不会触发preferencesListener


有人有办法解决这个问题吗?

IMO系统所做的是正确的行为


但是您应该能够引入一个标志来区分第一次调用和后续调用。

也许这是正确的行为。但我不明白为什么它只是在第一次发布之后才发布?。请尝试删除应用程序数据。preferences监听器会被调用吗?我认为问题在于android:defaultValue=“true”属性将在第一次启动时从preferences aktivity设置。。因此,当在首选项中未添加任何带有首选项键的内容时,将始终调用侦听器。。现在。。不知道如何解决此问题:)这意味着当没有应用程序数据时,首选项已更改(以前的状态可能是已删除或设备上没有应用程序)。非常符合逻辑。至于解决方案,您可以在共享首选项中引入一个布尔标志,比如“已启动”。当调用侦听器时,检查该标志是否存在。如果(该标志不存在或为false),{这是第一次启动;您将该标志设置为true而不执行任何操作}其他{这是后续启动;您想做什么就做什么}