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:
Remove the onClickListener from the main fragment in OnPause, and set it in OnResume. That way, any time the main fragment is not the active fragment, it cannot be clicked.
Subclass your top level layout in your VenueFragment and override OnTouchEvent to return true. This will essentially do the same thing as setting an onClickListener, but you may find that it makes your intention to block all touch events clearer.
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à set
android:clickable="true"
cho root của current fragmentCó thể có 1 số cách khác, nhưng dài dòng hơn: