Android 如何在总线上自动注册/取消注册自定义视图(来自xml)

Android 如何在总线上自动注册/取消注册自定义视图(来自xml),android,bus,registering,Android,Bus,Registering,我有一个自定义的编辑文本视图。它扩展了默认值并添加了显示TimePickerDialogFragment、NumberPickerDialogFragment和类似内容的功能 我所有的片段对话框都与总线系统一起工作,以使重新连接到父活动成为不必要的 通常,我在创建时注册所有对象,并在其父活动的onPause中注销它们。。。为此,我使用一个作用域总线,它保存对所有已注册对象的引用,并在活动的onPause中自动注销它们。到目前为止,这项工作是最佳的。我的所有自定义类都使用构造函数,它接收对作用域总

我有一个自定义的编辑文本视图。它扩展了默认值并添加了显示TimePickerDialogFragment、NumberPickerDialogFragment和类似内容的功能

我所有的片段对话框都与总线系统一起工作,以使重新连接到父活动成为不必要的

通常,我在创建时注册所有对象,并在其父活动的
onPause
中注销它们。。。为此,我使用一个作用域总线,它保存对所有已注册对象的引用,并在活动的
onPause
中自动注销它们。到目前为止,这项工作是最佳的。我的所有自定义类都使用构造函数,它接收对作用域总线的引用。。。因此,类只需在作用域总线上注册自己,而不需要再注销自己,作用域总线将自动完成这项工作

现在注册我的自定义edittext没有问题,但是如何自动注销它呢?我正在用XML添加视图,我不想手动将它们全部添加到我的作用域总线


有人知道如何以某种方式自动注销吗?

因为您使用的是Otto。您可以看看他们是如何找到
@Subscribe
方法的:

从设计角度(IMO)来看,您的观点是混合了两种责任——一些UI表示和与较低系统层的通信。常识规则类只负责一件事


你可以从另一个角度来思考这个问题。在任何不使用总线的项目中重用这样的组件会困难得多。考虑一下您的内部设计,就像您将要开放系统组件的源代码一样

您是实现一些接口来接收总线事件还是基于注释?在这两种情况下,您都可以暂停活动,遍历子树并取消注册它们(如果它们实现了接口或带有注释的方法)。片段或活动应基于事件管理视图的状态。它基于注释。。。我会考虑使用你的想法和检查,如果注释方法存在…你只需要看看如何做到这一点……至于第二点,你会建议什么替代方案?我的EditText将创建一个对话框,该对话框必须更新EditText(或者更确切地说,更新相应的编辑文本)…你是对的,我混合了一点。但我删除了我的接口,因为我决定使用总线系统,因为对我来说它只有优势。。。它使我的对话更容易。。。当然,如果不与总线一起使用,它是不可重用的,但另一方面,如果与总线一起使用,它更易于重用。。。这实际上是我的决定……如果继续开车(我想这样做,因为积极的方面对我来说更重要),你知道如何解决这个问题吗?实际上,我不认为在视图类中处理总线事件或在主活动中处理总线事件是另一种方式,缺点是必须在总线事件中找到相应的视图来更新它。。。这必须在每项活动中手动完成…当然,在您的设计中,有些事情肯定更容易,但也有缺点。例如,这种取消订阅要求您使用非常复杂的onPause和onResume编写自己的基本活动。片段或平均活动中没有那么多视图,因此在事件表单模型上管理UI组件是meunsubscribing的首选方法,这并没有太多工作。。。我正在使用一个全局ScopedBus,它具有从活动到对象列表的映射。。。(这是我现在的解决方案,效果很好)。我在onResume/onPause中注册/取消注册,并在onCreate/onDestroy中添加/删除活动,以保持映射干净。。。无论如何,我都在使用基本活动,因为我在整个应用程序中使用活动显示/隐藏的自定义动画。。。无论如何,我发现,定制的基本活动可能非常有用。。。如果你已经使用它,一些改变可以很快完成。。。