2013-08-23 10 views
2

我有一個自定義的EditText視圖。它擴展了默認的一個,並增加了顯示TimePickerDialogFragment,一個NumberPickerDialogFragment和類似的,使重新連接到不必要的父活動的能力...如何在總線上自動取消註冊自定義視圖(從xml)

我所有的FragmentDialogs與總線系統工作,...

正常情況下,我在創建時註冊所有對象,並將它們註銷到其父級活動的中......我使用範圍內的總線來保存對所有註冊對象的引用,並在活動的中自動取消註冊。迄今爲止這項工作是最佳的。我所有的自定義類都使用一個構造函數,它接受對範圍總線的引用......所以這個類只需要在有限範圍的總線上註冊,而且不需要註銷自己,範圍化的總線就會自動執行。

現在註冊我的自定義edittext是沒有問題的,但如何自動取消註冊?我在XML中添加視圖,我不想將它們全部手動添加到我的作用域總線。

有沒有人有一個想法如何註銷可以以某種方式自動化?

+0

您是在實現一些接口來接收總線事件還是基於註釋?在這兩種情況下,您都可以在您的活動的暫停中遍歷子樹,並在它們實現接口或註釋方法時取消註冊。 –

+0

但是我們對於我的觀點不應該從設計的角度瞭解公共汽車。片段或活動應根據事件管理觀點狀態。 –

+0

它是基於註釋...我會考慮使用你的想法和檢查,如果註釋方法存在...只需要看看如何做到這一點... – prom85

回答

1

由於您使用的是Otto。你可以看看他們是如何找到@Subscribe方法:https://github.com/square/otto/blob/master/library/src/main/java/com/squareup/otto/AnnotatedHandlerFinder.java

從設計角度來看,你的觀點是混合兩個職責 - 一些用戶界面表示和與較低的系統層進行通信。常識規則 - 類只負責一件事。

您可以從其他角度思考這個問題。在任何不使用總線的項目中重複使用這些組件會困難得多。想想你的內部設計,就像你打算開源你的系統組件一樣。

+0

你是對的,我正在混合這一點。但是我刪除了我的接口,因爲我決定使用總線系統,因爲對我來說它只有優點...它使我的對話更容易......當然,如果它不用於總線,它是不可重用的,但另一方面,如果與公共汽車一起使用則更容易重複使用......這實際上是我的決定... – prom85

+0

如果保持公共汽車(因爲我想要,因爲積極點對我來說更重要),你有一個想法如何解決這個問題?事實上,我並沒有看到另一種處理觀看班的公交賽事或處理主要活動中的公交賽事的另一種方式,其缺點是不得不以某種方式在公交賽事中找到相應的觀點來更新它......必須在每個活動中手動完成... – prom85

+0

當然,有些東西在你的設計中肯定會更容易,但也有缺點。例如,這個取消訂閱需要你用相當複雜的onPause和onResume編寫自己的基本活動。在片段或平均活動中沒有太多視圖,因此管理事件表單模型上的UI組件對我來說是首選方式 –