removeAllViews ()와 removeAllViewsInLayout ()의 차이점은 무엇입니까?
선형 레이아웃을 동적으로 채우고 있습니다. 응답에 따라 이전 자식보기를 지우고 새보기를 만들어야합니다. 나는 문서를 읽었지만 여전히 몇 가지 방법과 혼동을 겪고 있으며 모두 동일한 기능으로 보입니다. 어떤 기능을 사용해야합니다.
Scott Biggs가 지적했듯이 그 차이는 크지 않습니다. 유일한 차이점은 removeAllViews()
전화 requestLayout()
와 invalidate()
그 이후입니다. 이 차이점이 여기에있는 이유는의 이름을 이해하는 것입니다 removeAllViewInLayout()
. 혼란스럽게도 그 의미는 "이보기 레이아웃 내의 모든보기 제거"가 아닙니다.
유사한 메소드 인 removeViewInLayout ()을 살펴보면 이것이 의미하는 바를 이해할 수 있습니다.
레이아웃 중에보기를 제거합니다. onLayout () 메서드에서 더 많은 뷰를 제거해야하는 경우 유용합니다.
따라서 removeAllViewsInLayout()
실제로는 "모든 뷰를 제거하고 레이아웃 패스 (예 : onLayout ())) 동안이 메서드를 호출합니다."라는 의미입니다. 그렇기 때문에 현재 레이아웃 단계에 이미 있다고 가정하고를 removeAllViewsInLayout()
호출하지 않으므로 requestLayout()
다른 레이아웃 단계를 요청할 필요가 없습니다.
당신이 사용하는 경우 removeAllViewsInLayout()
, 그것은 당신이 레이아웃 패스 동안이를 호출하고, 또는 적절하게 호출 할 수 있도록 귀하의 책임 requestLayout()
과 invalidate()
필요에 따라.
removeAllViews () :-ViewGroup에서 모든 자식 뷰를 제거하려면이 메서드를 호출합니다. removeAllViewsInLayout () :-얼마나 많은 자식 뷰를 렌더링할지 계산하기 전에 먼저 화면의 크기를 알아야 할 때 자체에서 자식 뷰를 제거하기 위해 ViewGroup 하위 클래스에 의해 호출됩니다.
건배!
음, 소스를 보면 큰 차이가 없습니다.
public void removeAllViews() {
removeAllViewsInLayout(); // Details implemented here
requestLayout();
invalidate(true);
}
따라서 invalidate()
선택한 시간에 전화를 걸지 않는 removeAllViews()
한 약간의 타이핑을 사용 하고 절약 할 수 있습니다 .
편집
자세한 설명은 David Lui 의 답변을 참조하십시오 . 요약하면 removeAllViews()
뷰를 구성하는 과정이 아닌 경우을 사용하십시오 removeAllViewsInLayout()
.
'programing' 카테고리의 다른 글
여러 파일 입력을 사용할 때 선택한 최대 파일을 제한하는 방법 (0) | 2021.01.15 |
---|---|
LRUCache를 사용하여 비트 맵을 언제 재활용해야합니까? (0) | 2021.01.15 |
인수 또는 널이 전달되지 않은 경우 Java 3 도트 매개 변수 (varargs) 동작 (0) | 2021.01.15 |
setup.py의 entry_points / console_scripts와 스크립트의 차이점은 무엇입니까? (0) | 2021.01.15 |
ES6 수업은 왜 올리지 않나요? (0) | 2021.01.15 |