我正在开发一个基本上由自定义View组成的Android模块。第三方可以放入他们的任何活动中。 此模块包含配置活动(基于PreferenceActivity)。
鉴于您无法从View启动活动,该模块会调用' openConfig(Intent intent)'在它显示的活动上。此活动充当模块的委托。
到目前为止工作正常(尽管我非常喜欢在内部处理所有内容的模块,不需要委托方法,但我认为这是不可能的)。 但是,我需要从首选项活动到模块的某种回调,以便在更改设置时通知模块。
我在考虑将模块的主类作为委托人添加到偏好活动中;
ConfigActivity a = new ConfigActivity();
a.testVar = "testtest";
Intent intent = new Intent(getContext(), a.getClass());
delegate.handleConfigAction(intent); //
但是,这个只有一个简单的String(而不是一个接口)的测试显示,在活动开始后,字符串不会被设置。
第二个想法是使用' putExtra()'关于意图,但这并不适合用例,因为代表我想放置一个View,而不是一个可序列化的数据对象。
我有什么方法可以在内部处理这个问题吗?我知道' onActivityResult()'函数(http://developer.android.com/training/basics/intents/result.html),但这意味着使用我的模块的第三方开发人员需要处理这个问题,这显然是需要避免的。
任何帮助都将受到高度赞赏!
编辑:最终解决方案 最后,我将模块从View更改为Fragment,现在可以更好地处理" child"活动等。从片段中启动活动时,' onActivityResult'功能很好地完成了手头的任务。
答案 0 :(得分:1)
您可以使用Activity
从View
开始Context
,如下所示:
@Override
public void onClick() {
Intent intent = new Intent(getContext(), ConfigActivity.class);
intent.putExtra("testVar", "testtest");
getContext().startActivity(intent);
}
您可以使用onWindowVisibilityChanged()
方法来阅读ConfigActivity
中设置的配置,以使View
更改其行为。