2017-01-20 16 views
1

일부 코드를 상속 했으므로 변경할 수 없습니다. :(사용자 정의보기가있는 활동으로 돌아갈 때 무효화가 onDraw를 호출하지 못합니다.

나는 다른 액티비티 (이후부터는 하위 액티비티라고 부름)가 호출되는 주 액티비티를 가지고 있는데,이 중 하나가 완료 될 때마다 finish를 호출하고 주 액티비티로 데이터를 반환한다.

각 활동 (기본 활동 포함)은 상단에 맞춤보기를 표시하는 막대를 가지고 있습니다. 사용자 정의보기에는 네트워크의 상태 (예 : Wi-Fi/모바일)에 따라 그림이있는 캔버스가 포함되어 있습니다. ..

'상태'데이터는 변경되지 않으므로 싱글 톤 내에서 유지되며 뷰는 싱글 톤에서 데이터를 가져 와서 무언가를 정의합니다. 즉, 데이터는 항상 예상대로입니다. .

네트워크가 변경 될 때 MainActivity를 시작할 때 데이터가 변경되고 'invalidate'에 대한 각 호출은 예상대로 'onDraw'에 대한 시스템 호출을받습니다.

각 하위 활동에서 동일한 내용이 다시 적용됩니다.

하위 작업이 끝나고 mainActivity로 돌아 오면 더 이상 무효화를 호출하면 onDraw가 호출되지 않습니다.

나는 이것을 꽤 오래 동안 보았으며, 무엇이 잘못 될지 알 수 없다. 내 생성자에서

내가 가진 :

invalidate(); 
requestLayout(); 

지금, 한 가지 더있다 ... 그에서 활동 복귀시 :

setWillNotDraw(false); 

데이터는 다음과 같은 방법이라고 변경 될 때마다 즉각적인 포인트, 내가 새로 고치면 이것은 올바르게 그려집니다. 즉 무효화가 onDraw 호출을 트리거합니다. 즉, 전파 된 모든 후속 네트워크 변경은 onDraw 호출을 초래하지 않습니다.

이것이 어떻게 든 분리되는보기와 관련이 있는지 궁금합니다. 나는 'onDetachedFromWindow'가 호출되었음을 알 수있다. 그러나 이것에 대한 방아쇠는 하위 활동의 ​​파괴이므로 MainActivity에 영향을 미치는 이유는 알 수 없다.하지만 생각할 수있는 유일한 방법이다.

난 ... 누군가가 나를 도울 수있는 충분한 정보를 제공 한 희망하고있다

+0

문제에 대해 자세히 설명해 주시겠습니까? 당신의 서브 액티브가 멈추고 있지만 숨어있는 동안 다시 그려야합니까? 또는 기본 활동이 하위 활동에서 복귀 한 후 다시 그려지지 않습니다. 는 보조 Activity에서 반환하면 –

+0

안녕 아르 템은 내 MainActivity는 각 하위 활동은 뷰의 자체 인스턴스를 가지고 있으며,이 보조 Activity에서 무효있어 경우 MainActivity는 다음의 onDraw를 처리하기를 거부 .... 다시 그립니다 중지합니다. – greysqrl

+0

사실, 각보기가 고유 한 인스턴스가 아닌 것 같아요. – greysqrl

답변

1
글쎄, 내 대답은 질문 할 거의 가지고 같아요 결국이 방법의 예입니다

절대적인 기본 사항으로 돌아가 확실한 점을 확인함으로써 문제를 해결할 수 있습니다.

내 활동은 모두 추상적 인 활동을 상속합니다. 해당 활동에는보기의 인스턴스가 있습니다. 내가 곤경에 처한 견해는 그들 자신의 실례를 갖는 것과는 대조적으로 그 선언을 사용하고 있었기 때문에 한 활동의 ​​행동이 우연히 다른 활동에 영향을 주었다.

그래서 모든 코드를 게시 할 수 있다면 다른 사람이이 코드를 발견했을 것이라고 확신하지만 불행히도이 경우에는 할 수 없습니다.

아직도이 게시물은 다른 사람들을 도울 해답을 제공하지는 않지만 어쩌면 말하지만 ... 분명히 첫발을 내 디디십시오!