2015-02-24 103 views
0

我正在开发一个基本上由自定义视图组成的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'函数可以很好地完成当前的任务。

+1

“以便模块在设置被更改时得到通知” - 为什么不使用[OnSharedPreferenceChangeListener](http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener。 HTML)? – CommonsWare 2015-02-24 14:47:39

+0

那么我将如何注册该听众呢?我的意思是,PreferencesActivity将从一个视图开始,而不是一个活动。 – AlBirdie 2015-02-25 09:33:14

+1

观点发起活动是一个关注点分离设计缺陷,恕我直言。这就是说,在启动PreferenceActivity之前,没有什么能阻止'View'访问'SharedPreferences'并调用'setOnSharedPreferenceChangeListener()'。 – CommonsWare 2015-02-25 12:15:47

回答

1

可以使用开始从ViewActivityContext为:

@Override 
public void onClick() { 
    Intent intent = new Intent(getContext(), ConfigActivity.class); 
    intent.putExtra("testVar", "testtest"); 
    getContext().startActivity(intent); 
} 

你可以使用onWindowVisibilityChanged()方法来读取,将在ConfigActivity设置,使您的View改变其行为的配置。

+0

在视图中使用getContext()可以很好地启动新的活动。感谢那。但是,我不能使用putExtra,因为我需要将视图实现传递给它。 – AlBirdie 2015-02-25 09:34:53

+0

为什么你需要通过'View'本身? – Gorcyn 2015-02-25 09:45:03

+0

那么,我想要回调视图。还有其他方法可以实现吗? – AlBirdie 2015-02-25 10:21:38