【问题标题】:Run some code when user closes a particular preference screen?当用户关闭特定偏好屏幕时运行一些代码?
【发布时间】:2012-06-02 19:27:28
【问题描述】:

有没有办法找出用户何时关闭特定的偏好屏幕?当用户在我的首选项屏幕之一中更改首选项时,我需要进行一些更新。不是当用户点击一个实际的复选框时,而是当他们按下后退按钮并完成编辑首选项时。

到目前为止,我所能找到的只是我可以覆盖我的 PreferenceActivity 的 onPause() 事件,这似乎在用户关闭首选项时发生。它有效,但我不确定这是最好的方法。有什么建议吗?

编辑

我不知道如何从 PreferenceActivity 中实际调用我的主要活动的方法。尝试使用 putExtra() 和各种东西。最终我想——为什么不做完全相反的事情呢?因此,我在主要活动中实现了 onResume() 方法。当用户关闭首选项时非常适合做一些事情,而且我可以接受这样一个事实,即每次我恢复我的应用程序时我的更新方法都会运行。

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:

    嗯,直到 2 分钟前,我一直在寻找这个问题的解决方案…… 我想我找到了方法。

    Preference myPrefScreen = findPreference("myPrefScreen");
        myPrefScreen 
                .setOnPreferenceClickListener(new OnPreferenceClickListener() {
    
                    @Override
                    public boolean onPreferenceClick(Preference prefScreen) {
                        // TODO Auto-generated method stub
    
                        Dialog prefScreenDialog = ((PreferenceScreen) prefScreen)
                                .getDialog();
                        prefScreenDialog
                                .setOnDismissListener(new OnDismissListener() {
    
                                    @Override
                                    public void onDismiss(DialogInterface arg0) {
                                        // TODO Auto-generated method stub
    
    
                                        ///HERE YOU CAN EXECUTE WHATEVER YOU WANT... 
                                    }
                                });
                        return false;
                    }
                });
    

    您需要 OnPreferenceClickListener 正确实例化仅在屏幕上点击 PreferenceScreen 条目并显示带有首选项子项的新窗口后生成的 PreferenceScreen 对话框。否则,您总是 getDialog() 返回 null 并且无法将 OnDismissListener 附加到它。

    一旦设置了 OnDismissListener,技巧就完成了!!

    我希望这会有所帮助。

    祝大家编码愉快!!

    【讨论】:

      【解决方案2】:

      这是最好的方法:重写 onPause() 方法。它在您的活动离开前台之前被调用。

      【讨论】:

      • 好的,谢谢!当调用 PreferenceActivity 的 onPause() 事件时,我将如何在我的主要活动中调用方法?我对 Java 很陌生,但从我目前所读的内容来看,我想我需要实现某种形式的回调?我该怎么做?
      【解决方案3】:

      onPause 是处理和更新的正确位置。

      【讨论】:

        猜你喜欢
        • 2012-08-24
        • 1970-01-01
        • 1970-01-01
        • 2013-07-06
        • 1970-01-01
        • 2021-02-07
        • 2017-06-14
        • 1970-01-01
        相关资源
        最近更新 更多