【问题标题】:Android: call a method from calling activityAndroid:从调用活动中调用方法
【发布时间】:2012-03-28 06:38:19
【问题描述】:

在我的活动中,在用户请求首选项屏幕上,我调用:

startActivity(new Intent(this, Preferences.class));

Preferences 类的定义如下:

public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener {
    ...
    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
        ...
    }

}

我需要在我的 Preferences 类中实现 OnSharedPreferenceChangeListener,因为我希望能够 - 例如 - 基于特定选择禁用首选项。 但我需要在我的主 Activity 中实现它,以对偏好更改做出反应。

不幸的是 onSharedPreferenceChanged() 仅在我的 Preferences 类中触发,而不是在我的主要活动中:我如何强制在机器人活动中触发它?

或者 - 如何从 Preferences 活动中的 onSharedPreferenceChanged() 在我的主要活动中手动调用 onSharedPreferenceChanged()?

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    在您的主要活动中,您可以为首选项更改注册一个侦听器:

    SharedPreferences prefs = PreferenceManager
        .getDefaultSharedPreferences(this);
    prefs.registerOnSharedPreferenceChangeListener(this);
    

    然后您将使用自己的 onSharedPreferenceChanged 方法在您的活动中实现 SharedPreferences.OnSharedPreferenceChangeListener

    【讨论】:

    • 谢谢!!!我已经在我的主要活动中做了 registerOnSharedPreferenceChangeListener() ,但由于某种原因它被注释掉了!感谢您的提示...
    【解决方案2】:

    嗯,在当前不“活跃”的活动中观察偏好变化几乎没有意义。您应该处理主要活动的生命周期事件,例如 onResumeonRestart 等。

    【讨论】:

      【解决方案3】:

      如果您想从两个活动中访问某些功能,您最好将此代码包含在一个可以从任何地方调用的静态方法中。在 Android 活动中,活动是解耦的,您实际上无法从一个活动访问其他活动的实例。

      【讨论】:

        猜你喜欢
        • 2016-01-08
        • 1970-01-01
        • 2016-05-29
        • 2013-08-20
        • 2020-03-19
        • 1970-01-01
        • 2013-08-26
        • 2012-06-15
        • 1970-01-01
        相关资源
        最近更新 更多