Android 倾听偏好变化

Android 倾听偏好变化,android,android-preferences,Android,Android Preferences,我正在根据实现首选项。但我在事件侦听器中没有收到更改。我意识到这是因为我像谷歌推荐的那样,在onResume中注销了侦听器。是我错过了什么,还是谷歌的建议错了 为了在活动中进行适当的生命周期管理,我们建议您 注册和注销您的 SharedReferences.OnSharedPreferenceChangeListener在 onResume()和onPause()回调分别为: “我的活动”以“首选项”活动启动“意图” public class GamePreferenceActivity ext

我正在根据实现首选项。但我在事件侦听器中没有收到更改。我意识到这是因为我像谷歌推荐的那样,在
onResume
中注销了侦听器。是我错过了什么,还是谷歌的建议错了

为了在活动中进行适当的生命周期管理,我们建议您 注册和注销您的 SharedReferences.OnSharedPreferenceChangeListener在 onResume()和onPause()回调分别为:

“我的活动”以“首选项”活动启动“意图”

public class GamePreferenceActivity extends Activity {
    public static final String KEY_COMPLEXITY = "prefGameComplexity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Display the fragment as the main content.
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new GamePreferenceFragment())
                .commit();

        PreferenceManager.setDefaultValues(this, R.xml.game_prefs, false);
    }
}

public class GamePreferenceFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.game_prefs);
    }
}
您需要调用或保存首选项中的更改

示例:

// Access the default SharedPreferences
    SharedPreferences preferences = 
    PreferenceManager.getDefaultSharedPreferences(this);
    // The SharedPreferences editor - must use commit() to submit changes
    SharedPreferences.Editor editor = preferences.edit();

    // Edit the saved preferences
    editor.putString("UserName", "JaneDoe");
    editor.putInt("UserAge", 22);
    editor.commit(); //or editor.apply() -- Read below for difference between these two
与之间的差异:

// Access the default SharedPreferences
    SharedPreferences preferences = 
    PreferenceManager.getDefaultSharedPreferences(this);
    // The SharedPreferences editor - must use commit() to submit changes
    SharedPreferences.Editor editor = preferences.edit();

    // Edit the saved preferences
    editor.putString("UserName", "JaneDoe");
    editor.putInt("UserAge", 22);
    editor.commit(); //or editor.apply() -- Read below for difference between these two
是在2.3中添加的,它提交时不返回表示成功或失败的布尔值

如果保存有效,则返回true,否则返回false

添加时,Android开发团队注意到几乎没有人注意到返回值,因此应用速度更快,因为它是异步的。

您需要调用或保存首选项中的更改

示例:

// Access the default SharedPreferences
    SharedPreferences preferences = 
    PreferenceManager.getDefaultSharedPreferences(this);
    // The SharedPreferences editor - must use commit() to submit changes
    SharedPreferences.Editor editor = preferences.edit();

    // Edit the saved preferences
    editor.putString("UserName", "JaneDoe");
    editor.putInt("UserAge", 22);
    editor.commit(); //or editor.apply() -- Read below for difference between these two
与之间的差异:

// Access the default SharedPreferences
    SharedPreferences preferences = 
    PreferenceManager.getDefaultSharedPreferences(this);
    // The SharedPreferences editor - must use commit() to submit changes
    SharedPreferences.Editor editor = preferences.edit();

    // Edit the saved preferences
    editor.putString("UserName", "JaneDoe");
    editor.putInt("UserAge", 22);
    editor.commit(); //or editor.apply() -- Read below for difference between these two
是在2.3中添加的,它提交时不返回表示成功或失败的布尔值

如果保存有效,则返回true,否则返回false


添加时,Android开发团队注意到几乎没有人注意到返回值,因此应用速度更快,因为它是异步的。

这是我注册和注销侦听器的方式:

@Override
public void onResume() {
super.onResume();
// Register the listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
                    .registerOnSharedPreferenceChangeListener(this);
        }

@Override
public void onPause() {
super.onPause();   
// Unregister the listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
                        .unregisterOnSharedPreferenceChangeListener(this);
            }

向我们显示您的onSharedPreferenceChanged,可能是您犯了错误。

这是我注册和注销侦听器的方式:

@Override
public void onResume() {
super.onResume();
// Register the listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
                    .registerOnSharedPreferenceChangeListener(this);
        }

@Override
public void onPause() {
super.onPause();   
// Unregister the listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
                        .unregisterOnSharedPreferenceChangeListener(this);
            }


向我们展示您的onSharedPreferenceChanged,可能是您犯了错误。

能否展示您的
onResume()
实现?文档似乎是正确的。你在
onResume()
中注册,在
onPause()中注销。你有什么问题?看起来不错。您的侦听器实现如何?当您对共享首选项进行更改时,是否在最后调用commit()?不,我没有。谷歌的例子中没有这样的代码。感谢您指出这一点。您能展示一下您的
onResume()
实现吗?文档似乎是正确的。你在
onResume()
中注册,在
onPause()中注销。你有什么问题?看起来不错。您的侦听器实现如何?当您对共享首选项进行更改时,是否在最后调用commit()?不,我没有。谷歌的例子中没有这样的代码。谢谢你指出这一点。你能提供完整的源样本吗?我刚刚在一些SharedReferences.Editor类中找到了commit。很好的解释,我对你的工作投了赞成票。但我仍然不知道它与我的用例有什么关系。我在序列化更改的数据方面没有问题-PreferenceFragment的实现代替了我。我希望得到通知,有一些更改,因此我实现了SharedReferences.OnSharedPreferenceChangeListener接口。但听众从未被呼叫过。我怀疑谷歌的建议是否正确,因为它在显示偏好活动时忘记了听众。是我做错了什么还是谷歌教程错了?我发布了完整的代码。我想我有理由。我希望收到首选项已更改(并已完成)的通知,然后修改我的活动。但我不会在MyActivity中听到这些,一旦GamePreferenceActivity启动(并且监听器被删除),MyActivity就会暂停。我将在GamePreferenceActivity中更新某个共享的首选项,并在MyActivity中比较该值。您能提供完整的源示例吗?我刚刚在一些SharedReferences.Editor类中找到了commit。很好的解释,我对你的工作投了赞成票。但我仍然不知道它与我的用例有什么关系。我在序列化更改的数据方面没有问题-PreferenceFragment的实现代替了我。我希望得到通知,有一些更改,因此我实现了SharedReferences.OnSharedPreferenceChangeListener接口。但听众从未被呼叫过。我怀疑谷歌的建议是否正确,因为它在显示偏好活动时忘记了听众。是我做错了什么还是谷歌教程错了?我发布了完整的代码。我想我有理由。我希望收到首选项已更改(并已完成)的通知,然后修改我的活动。但我不会在MyActivity中听到这些,一旦GamePreferenceActivity启动(并且监听器被删除),MyActivity就会暂停。我将在GamePreferenceActivity中更新某个共享的首选项,表明有更改,然后在MyActivity中比较此值。您在哪里注册此侦听器?在首选项活动中或启动首选项活动的活动中?我正在将OnSharedPreferenceChangeListener实现为PreferenceFragment。有onResume和onPause。
getPreferenceScreen()
已去除润滑。有其他选择吗?@Srikar Reddy阅读本文:您在哪里注册此侦听器?在首选项活动中或启动首选项活动的活动中?我正在将OnSharedPreferenceChangeListener实现为PreferenceFragment。有onResume和onPause。
getPreferenceScreen()
已去除润滑。还有其他选择吗?@Srikar Reddy阅读本文: