2013-08-23 2 views
2

사용자 정의 EditText보기가 있습니다. 그것은 ... 기본을 확장하고 불필요한 부모 활동에 재 부착을 만들 수있는 버스 시스템으로 작업 버스에서 자동으로 사용자 정의보기 (xml에서 사용자 정의보기)를 등록/등록 해제합니다.

내 모든 FragmentDialogs

TimePickerDialogFragment하는 NumberPickerDialogFragment 및 이와 유사한 표시 할 수있는 기능을 ... 추가

일반적으로 모든 개체를 생성시 등록하고 부모 작업의 에서 등록을 취소합니다 ... 등록 된 모든 개체에 대한 참조를 저장하고 해당 활동의 에서 자동으로 등록을 취소하는 범위 버스를 사용합니다. 그 작품은 지금까지는 최적이었습니다. 모든 사용자 정의 클래스는 생성자를 사용하여 범위가 지정된 버스에 대한 참조를 수신합니다. 따라서 클래스는 범위가 지정된 버스에만 등록해야하며 더 이상 등록을 취소 할 필요가 없습니다. 범위가 지정된 버스는 자동으로이를 수행합니다.

내 사용자 정의 edittext를 등록해도 문제가 없지만 자동으로 등록을 취소하는 방법은 무엇입니까? XML로 뷰를 추가하고 있으며 범위가 지정된 버스에 수동으로 모든 뷰를 추가하지 않아도됩니다.

등록 해제가 어떻게 든 자동으로 수행 될 수 있다는 생각을 가진 사람이 있습니까?

+0

버스 이벤트를 수신하기 위해 일부 인터페이스를 구현하고 있습니까, 아니면 주석 기반입니까? 두 경우 모두 자식 트리를 통해 onPause 활동을 수행하고 인터페이스를 구현하거나 주석이 달린 메소드가있는 경우 등록을 취소 할 수 있습니다. –

+0

그러나 나를 위해 우리는 디자인 점에서 버스에 관해 알 필요가 없다. 프래그먼트 또는 활동은 이벤트를 기반으로 뷰 상태를 관리해야합니다. –

+0

주석 기반입니다 ... 주석 방법이있는 경우 아이디어를 사용하고 확인하는 방법을 고려할 것입니다 ...이 방법을 살펴야 만합니다 ... – prom85

답변

1

오토를 사용하고 있으므로. 그들은 방법을 찾는 방법을 살펴볼 수 있습니다 : https://github.com/square/otto/blob/master/library/src/main/java/com/squareup/otto/AnnotatedHandlerFinder.java

디자인 관점 (IMO)에서 볼 때 UI보기와 하위 시스템 계층과의 통신이라는 두 가지 책임이 혼합되어 있습니다. 상식 규칙 - 클래스는 한 가지 일에만 책임이 있습니다.

다른 관점에서 생각해 볼 수 있습니다. 버스를 사용하지 않는 프로젝트에서 이러한 구성 요소를 재사용하는 것은 훨씬 더 어려울 것입니다. 시스템 구성 요소의 소스를 오픈하는 것처럼 내부 디자인에 대해 생각해보십시오.

+0

맞습니다. 그러나 버스 시스템을 사용하기로 결정했기 때문에 인터페이스가 제거되었으므로 장점이 있습니다 ... 대화 상자를 훨씬 쉽게 만들 수 있습니다 ... 물론 버스와 함께 사용하지 않으면 재사용 할 수 없습니다. 그러나 다른 한편으로는, 그것은 버스와 함께 사용하면 훨씬 재사용이 용이합니다 ... 실제로는 내 결정이었습니다. ... – prom85

+0

버스를 유지한다면 (내가 원하는대로, 긍정적 인 점이 나보다 중요하기 때문에), 문제를 해결하는 방법에 대해 알고 있습니까? 사실,보기 클래스의 버스 이벤트를 처리하거나 주요 액티비티에서 버스 이벤트를 처리하는 다른 방법은 보이지 않습니다. 버스 이벤트에서 해당 뷰를 찾아서 업데이트해야하는 단점이 있습니다. 수동으로 모든 활동을 완료해야합니다 ... – prom85

+0

물론, 몇 가지 확실하지만 단점뿐만 아니라 귀하의 설계에 쉽습니다. 예를 들어 꽤 복잡한 onPause 및 onResume을 사용하여 기본 활동을 작성해야하는 가입 취소입니다. 조각이나 평균 활동에 너무 많은 의견이 없으므로 이벤트 양식 모델에서 UI 구성 요소를 관리하는 것이 나에게 선호되는 방법입니다 –

관련 문제