android - LayoutInflater.inflater的问题?
黄舟
黄舟 2017-04-17 17:36:02
0
2
444

新手,在看inflater的时候有点疑问
在LayoutInflater.inflater(int resId,ViewGroup root,boolean attchtoroot)这个方法中,
其中第三个参数是什么意思,什么时候用true,什么时候用false?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

모든 응답(2)
大家讲道理

간단히 말하면, 각 뷰에 레이아웃 위치를 결정하기 위해 LayoutParams가 필요한 경우 레이아웃 리소스 파일에서 만드는 레이아웃 접두사 구성은 기본적으로 LayoutParams에 기록됩니다. 그러나 LayoutParams는 현재 View를 기반으로 생성되지 않고 상위 View를 기반으로 정의됩니다. 예를 들어 TextView가 LinearLayout에 존재하는 경우 LinearLayout.LayoutParams를 기반으로 하는 LayoutParams를 갖게 됩니다. 이렇게 하면 TextView가 LinearLayout에 고유한 일부 레이아웃 속성을 갖게 되기 때문입니다.
바로 그 경우입니다. LayoutInflater.inflater를 사용하여 리소스 파일에서 뷰를 로드할 때 최상위 뷰에는 상위 뷰가 없습니다. 이 뷰에서 설정한 레이아웃 시리즈 매개변수는 다음과 같습니다. be 가장 기본적인 LayoutParam이 사용되고 손실됩니다. 매개변수가 손실되지 않도록 하기 위해 상위 뷰에 대한 참조인 root를 제공하여 우리가 사용하는 LayoutParams가 루트 클래스에서 제공하는 LayoutParams와 일치함을 나타냅니다. 일반적인 상황에서는 로드된 뷰가 결합할 상위 뷰 객체를 제공하므로 일관성을 더 쉽게 보장할 수 있습니다.
세 번째 항목 attchToRoot은 실제로 바로가기 작업입니다. 즉, root을 참조로 사용하면 뷰도 root에 추가되어 root의 하위 뷰가 됩니다. Android의 기본 오버로드에서 root을 제공하고 비어 있지 않으면 attchToRoot의 값이 true입니다. 이는 뷰가 기본적으로 root에 추가된다는 의미입니다.
root 및 true가 Android에서 사용되는 기본 메서드이지만 일반적으로 LayoutInflater.inflater에는 매우 특별한 반환 메서드가 있기 때문에 이러한 방식으로 사용하지 않습니다. 즉, 우리가 전달하는 attchToRoot가 true인 경우, LayoutInflater. 인플레이터는 로드된 뷰 자체 대신 root을 반환합니다. 일반적인 상황에서는 뷰를 로드할 때 뷰에 대해 일부 할당 작업을 수행하기를 원합니다. 이는 뷰 자체를 직접 가져오는 것을 선호한다는 의미입니다. 따라서 일반적인 조합은 root와 false입니다. View에 값을 할당한 후 root에 추가합니다.

小葫芦

@유명님의 답변은 이보다 더 좋을 수 없습니다.
포스터에서 더 많은 내용을 보려면 공식 문서를 읽어보세요

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿