반응형
Inflate란?
사전적 정의로는 "부풀리다 ,올리다" 라는 의미를 가지고 있다.
❗❔이 뜻은 뭘까?
안드로이드에서 Inflate는 xml에 표기된 레이아웃들을 메모리에 로딩된 후 객체화 시키는 과정이다.
쉽게 말해, layout에 그때 그때 다른 layout을 집어 넣을 수 있다는 얘기다.
즉, 각기 다를 화면들을 한화면에 동적으로 띄우고 싶은 경우 사용된다.
🙄메모리를 객체에 올릴 수있는 함수는 setContentView() 가 아닌가?
화면을 Activity로 만들 경우 안드로이드에서는 Java or Kotlin 소스코드와, xml 인 레이아웃 파일 이렇게 두개가 생성된다.
이때, Activity에서 setContentView()가 바로 xml을 객체화시키는 Inflate 동작이다.
Activity가 onCreate 될 때 setContentView()를 하기 때문에 바로 메모리에 객체가 올라가 있게된다.
그래서 setContentView() 함수 실행 후 해당 xml에 있는 UI적 요소들을 아래와 같이 가져와 쓸 수 있는 것이다.
Button button = findViewById(R.id.btn1); // JAVA
var button : Button = findViewById(R.id.btn1) // Kotlin
💡여러가지 상황에서도 저렇게 사용할 수 있을까?
답은 아쉽게도 아니다..
여러가지 상황이 있을 것이다.
한 화면 안에서 다른 화면을 불러 오고 싶거나, setContentView()가 없는 Fragment는 어떻게 하지?
직접 객체화 시켜서 메모리에 올리는 수 밖에..
한 화면에 다른 화면을 들고 오고 싶을경우
[소스코드]
// fragment_sub1.xml 객체화
val inflater = layoutInflater
val v1 : View = inflater.inflate(R.layout.fragment_sub1,frameLayoutMain, true)
// fragment_sub1.xml에 있는 UI구성 요소 사용가능
var textView1 : TextView = v1.findViewById(R.id.textView1)
textView1.setText("Sub_Fragment1")
activity 에서 여러개의 화면을 보여 주고 싶을 경우 추가로 만든 fragment_sub1.xml을 객체화 시킴
inflate(resource: Int, root: ViewGroup?, attachToRoot: Boolean)
- resource : View를 만들고 싶은 레이아웃 파일의 id
- root: 생성될 View의 parent를 명시
- attachToRoot: true 로 설정해 줄 경우 root의 자식 View로 자동으로 추가, false 일 경우 root는 생성되는 View의 layoutParam을 생성하는데만 사용
Fragment에서 Inflate 할 경우
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_sub2, container, false)
}
반응형
'Tools > Android Studio' 카테고리의 다른 글
[ Android Studio ] 안드로이드 리스트뷰 어댑터( ListView, Adapter ) 사용하기 (1) | 2021.10.27 |
---|---|
[ Android Studio] 안드로이드 어댑터(Adapter)와 어댑터뷰(Adapter View)란? 어댑터(Adapter) 개념 (2) | 2021.10.27 |
[Android Studio] 안드로이드 스튜디오 (Android Studio) 프로젝트 자동 열기 해제 (0) | 2021.10.26 |
[ Android Studio ] 간편 데이터 저장 SharedPreferences 사용 방법 (0) | 2021.10.26 |
[ Android Studio ] 안드로이드 수평 스크롤뷰 (HorizontalScrollView) (0) | 2021.10.23 |