dwarvesf / til

Today I Learned. Our knowledge hub. List out what we've learned everyday, organized.
29 stars 1 forks source link

Issue in Android Fragment : still click on previous fragment #49

Open siliconprime-thanhduc opened 5 years ago

siliconprime-thanhduc commented 5 years ago

Khi mình cùng Khanh làm dự án Sol, chúng tôi đã đã implement UI dạng backdrop: các bạn có thể xem tại đây để biết dạng UI này: https://material.io/design/components/backdrop.html

Cách mình dùng để chuyển đổi các screen trong back screen là sử dụng fragment. Để di chuyển qua 1 fragment khác, ai cũng biết ta có thể dùng 2 cách : add hoặc replace. Cách replace thì chúng ta sẽ ko gặp vấn đề như title bài til này. Khi dùng replace, ta move sang 1 fragment khác, khi back lại, fragment previous sẽ được create lại. Nếu ta muốn fragment đầu vẫn giữ và ko destroy, 1 fragment khác add vào stack sẽ nằm trên fragment này ta sẽ dũng add Và từ đây ta có 1 issue Dù đang ở fragment sau khi ta nhấp vào 1 vùng click của fragment trước, sự kiện click vẫn được trigger.

Lý do: Không giống như activity, khi di chuyển qua 1 screen khác là bạn move hẳn sang 1 view hoàn toàn mới. Còn fragment được đặt trong 1 view của framelayout, khi replace thì chỉ có 1 view của 1 fragment, còn dùng add thì 1 viewgroup này chồng lên 1 viewgroup của fragment cũ. Những vùng mà có sự kiện click của fragment trước vẫn detect được khi fragment mới ko có clickable trên những vùng click đó.

Solution: Cách đơn giản nhất để resolve này là setandroid:clickable="true" cho root của current fragment

Có thể có 1 số cách khác, nhưng dài dòng hơn: