Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从另一个活动访问类_Android_Android Activity_Android Preferences - Fatal编程技术网

Android 从另一个活动访问类

Android 从另一个活动访问类,android,android-activity,android-preferences,Android,Android Activity,Android Preferences,具有以下设置: MainActivity类-扩展活动 MyLayout类-扩展视图 Prefs类-扩展PreferenceActivity并实现OnSharedPreferenceChangeListener MainActivity创建MyLayout类并将其设置为其contentview。一旦用户按下菜单,Prefs类开始,用户可以在其中更改一些设置 我想要的是,一旦用户更改了设置,Prefs类中重载的OnsharedPreferenceChanged方法将被调用,并且我希望从那里调用在Ma

具有以下设置:

MainActivity类-扩展活动

MyLayout类-扩展视图

Prefs类-扩展PreferenceActivity并实现OnSharedPreferenceChangeListener

MainActivity创建MyLayout类并将其设置为其contentview。一旦用户按下菜单,Prefs类开始,用户可以在其中更改一些设置

我想要的是,一旦用户更改了设置,Prefs类中重载的OnsharedPreferenceChanged方法将被调用,并且我希望从那里调用在MainActivity中创建的MyLayout类上的公共方法


如何执行此操作?

不要在preferenceactivity中重载SharedPreferenceChanged方法。在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()上注销它。

尝试使
main活动
实现
OnSharedPreferenceChangeListener
并按照Falmari所说的那样在
onCreate()
方法上注册它。

按照建议进行了更改,但只运行了一次。只要我尝试再次进入菜单并更改值,就不会再次调用onsharedpreferencechanged。尝试注销侦听器,但这只会使它根本不起作用。我的猜测是,在第一次访问菜单后,侦听器“崩溃”了,我不知道为什么。在重新启动并清除eclipse之后,上面的问题似乎已经解决了。是的,首选项侦听器没有被使用,因此我建议不要在Activity类中实现onSharedPreferenceChangeListener,这一定是其他一些奇怪的问题。只需创建onSharedPreferenceListener的一个新命名实例就可以了,为什么不推荐它呢?因为它增加了复杂性,违反了一些面向对象的原则。除非必要,否则您的活动不应实现接口。拥有类和对象的目的是尽可能地分离实现。在不需要接口的类上实现接口只会增加复杂性