programing

removeAllViews ()와 removeAllViewsInLayout ()의 차이점은 무엇입니까?

copyandpastes 2021. 1. 15. 20:18
반응형

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().

참조 URL : https://stackoverflow.com/questions/11952598/whats-difference-between-removeallviews-and-removeallviewsinlayout

반응형