【问题标题】:accessing a class from another activity从另一个活动访问一个类
【发布时间】:2011-04-02 06:08:48
【问题描述】:

有以下设置:

MainActivity 类 - 扩展活动

MyLayout 类 - 扩展视图

Prefs 类 - 扩展 PreferenceActivity 并实现 OnSharedPreferenceChangeListener

MainActivity 创建一个 MyLayout 类并将其设置为它的 contentview。一旦用户按下菜单,Prefs 类就会启动,用户可以在其中更改一些设置。

我想要的是,一旦用户更改设置,将调用 Prefs 类中重载的 OnsharedPreferenceChanged 方法,然后我想调用在 MainActivity 中创建的 MyLayout 类的公共方法。

我该怎么做?

【问题讨论】:

    标签: android android-activity android-preferences


    【解决方案1】:

    不要在偏好活动中重载 onSharedPreferenceChanged 方法。在你的 MainActivity 中获取一个共享首选项的实例,然后在你的 mainActivity 中注册一个 onsharedpreferencechangedlistener

    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); pref.registerOnSharedPreferenceChangeListener(prefListener);

    然后你可以创建一个新的偏好监听器

    OnSharedPreferenceChangeListener prefListener = new OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged( SharedPreferences sharedPreferences, String key) { // Do stuff } };

    您还应该在 onPause() 中取消注册监听器,除非您需要它持续存在,否则在 onStop() 中取消注册

    【讨论】:

    • 按照建议进行了更改,它可以工作,但只有一次。一旦我尝试再次进入菜单并更改值,就不会再次调用 onsharedpreferencechanged。尝试注销侦听器,但这只会使它根本不起作用。我的猜测是听众在第一次访问菜单后“崩溃”了,我不知道为什么。
    • 在重启和清除 eclipse 后,上述问题似乎已经解决了。
    • 是的,偏好监听器没有被消耗,所以它一定是其他一些奇怪的问题
    【解决方案2】:

    尝试让 MainActivity 实现 OnSharedPreferenceChangeListener 并按照 Falmarri 所说的在 onCreate() 方法上注册它。

    【讨论】:

    • 我建议不要在 Activity 类中实现 onSharedPreferenceChangeListener。只需创建一个新的 onSharedPreferenceListener 命名实例
    • 你为什么反对它?
    • 因为它增加了更多的复杂性并且违反了一些面向对象的原则。除非有必要,否则您的活动不应实现接口。拥有类和对象的目的是尽可能地分离实现。在不需要的类上实现接口只会增加复杂性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多