我正在开发一个基本上由自定义视图组成的Android模块。第三方可以放入任何他们的活动中。 该模块包含一个配置活动(基于PreferenceActivity)。Android意图活动回调
鉴于您无法从View开始活动,模块会在其显示的活动中调用'openConfig(意图意向)'。此活动充当模块的代理。
到目前为止工作正常(虽然我真的很喜欢模块内部处理所有内容,不需要委托方法,但我认为这是不可能的)。 但是,我需要从首选项活动到模块的某种回调,以便在更改设置时通知模块。
我正在考虑将模块的主类添加为首选项活动的代理;
ConfigActivity a = new ConfigActivity();
a.testVar = "testtest";
Intent intent = new Intent(getContext(), a.getClass());
delegate.handleConfigAction(intent); //
然而,这个测试只是一个简单的字符串(而不是接口)显示,该活动开始后的字符串将不会置。
第二个想法是在意图上使用'putExtra()',但这并不适合用例,因为我真的想要放在那里的委托是一个View而不是一个可序列化的数据对象。
有没有什么方法可以让我在内部处理?我知道'onActivityResult()'函数(http://developer.android.com/training/basics/intents/result.html),但这意味着使用我的模块的第三方开发人员需要处理此问题,这是由于显而易见的原因需要避免的。
任何帮助将不胜感激!
编辑:最终的解决方案 最后,我已经改变了模块从视野中的片段,该功能现在与处理“子”活动,这样更好。当从一个片段开始一个活动时,'onActivityResult'函数可以很好地完成当前的任务。
“以便模块在设置被更改时得到通知” - 为什么不使用[OnSharedPreferenceChangeListener](http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener。 HTML)? – CommonsWare 2015-02-24 14:47:39
那么我将如何注册该听众呢?我的意思是,PreferencesActivity将从一个视图开始,而不是一个活动。 – AlBirdie 2015-02-25 09:33:14
观点发起活动是一个关注点分离设计缺陷,恕我直言。这就是说,在启动PreferenceActivity之前,没有什么能阻止'View'访问'SharedPreferences'并调用'setOnSharedPreferenceChangeListener()'。 – CommonsWare 2015-02-25 12:15:47